Python 字典排序

参考链接:python: sorting a dict of dicts on a key

字典的排序其实不是字典的排序,因为字典本来就是无序的数据集,可以用 items()或iteritems()方法得到包含键、值对的元组的列表或迭代器对象来排序。

items()返回的是列表,iteritems()返回的是迭代器对象,iteritems()比items()有更好的内存效率

排序有两种方法sort()和sorted(),sort()与sorted()的不同在于,sort()是列表的内建函数,只是原列表的重新排序,而sorted()是built-in函数,会返回一个排序后列表副本,sorted()还可以对iteritems()排序

d = {'ford': {'count': 3},
     'mazda': {'count': 0},
     'toyota': {'count': 1}}

>>> d.items().sort(key=lambda x: x[1]['count'])
>>> d.items()
[('mazda', {'count': 0}), ('toyota', {'count': 1}), ('ford', {'count': 3})]
d = {'ford': {'count': 3},
     'mazda': {'count': 0},
     'toyota': {'count': 1}}

>>> sorted(d.items(), key=lambda (k, v): v['count'])
[('mazda', {'count': 0}), ('toyota', {'count': 1}), ('ford', {'count': 3})]
d = {'ford': {'count': 3},
     'mazda': {'count': 0},
     'toyota': {'count': 1}}

>>> sorted(d.iteritems(), key=lambda (k, v): v['count'])
[('mazda', {'count': 0}), ('toyota', {'count': 1}), ('ford', {'count': 3})]	
注意lambda函数的写法

lambda x: x[1]['count']

lambda (k, v): v['count']

这两种写法 sorted都是支持的。sort只支持第一种写法。

如果要得到逆序序列需要在sort sorted的参数加上reverse = True,默认值是reverse = False。

你可能感兴趣的:(Python)