sort

字典

# coding:utf-8

adict = {'a':1,'t':5, 'b':5, 'e':4}
print adict.keys()
# ['a', 'b', 'e', 't']

print adict.values()
# [1, 5, 4, 5]

print adict.items(), '\n', type(adict.items()[0]), '\n'
# [('a', 1), ('b', 5), ('e', 4), ('t', 5)]
# <type 'tuple'> 

# 先按照value排序
def sortedDictValues1(adict):
    items = adict.items()
    items.sort()
    return [value for key,value in items]
print sortedDictValues1(adict)

# [1, 5, 4, 5]

def sortedDictValues2(adict):
    keys = adict.keys()
    keys.sort()
    return [adict[key] for key in keys]
print sortedDictValues2(adict), '\n'

# 根据value排序,打印value
def sort_by_value(d):
    items = d.items()
    backitems=[[v[1], v[0]] for v in items]
    backitems.sort()
    print backitems
    return [backitems[i][1] for i in range(0, len(backitems))]
print sort_by_value(adict)

print '\n一行搞定:'

d = adict

print [v for v in sorted(d.values())]

# 自定义cmp方法, 3.0 已经移除
# cmp(x[1], y[1]) 表示比较value的大小,返回正数或负数。
print sorted(d.items(), lambda x, y: cmp(x[1], y[1]))

# tuple排序
student_tuples = [
        ('john', 'A', 15),
        ('jane', 'B', 12),
        ('dave', 'B', 10),
        ]

# sort by age
print sorted(student_tuples, key=lambda x: x[2])
print ''

rows = [
    {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
    {'fname': 'David', 'lname': 'Beazley', 'uid': 1006},
    {'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
    {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
]
# 使用itemgetter
from operator import itemgetter
# 先按照'lname'排序降序,再按照'uid'排序降序,
print sorted(rows, key=itemgetter('lname','uid'), reverse=True)
print ''
# 先按照'lname'排序正序,相同的再按照'uid'排序降序序。
# 排序会默认保持原始顺序
# 优先级高的排序要之后排序
print sorted(sorted(rows, key=itemgetter('uid'), reverse=True), key=itemgetter('lname'))


# 按照uid排序
# sorted(rows, key=itemgetter(2)) 报错KeyError: 2
sorted(student_tuples, key=itemgetter(2))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容