参考链接: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。