假如有学生成绩以字典顺序排列:{'Tom': 87, 'Jack': 90, 'Rose': 100.....}
想要根据学生的成绩来进行排序,可以考虑使用sorted函数。但是sorted函数用在字典中,是仅对字典的键进行排序的,而不考虑值。
那么我们可以通过zip函数,将字典转化为一个元组:
>>> from random import randint >>> s = {x: randint(60, 100) for x in 'abcdef'} {'a': 72, 'c': 86, 'b': 100, 'e': 74, 'd': 89, 'f': 62} >>> s.keys() ['a', 'c', 'b', 'e', 'd', 'f'] >>> s.values() [72, 86, 100, 74, 89, 62] # 这里有个小技巧,我们可以使用s.iterkeys()和s.itervalues()来提高程序的运行效率 >>> zip(s.values(), s.keys()) [(72, 'a'), (86, 'c'), (100, 'b'), (74, 'e'), (89, 'd'), (62, 'f')] >>> sorted(zip(s.values(), s.keys())) [(62, 'f'), (72, 'a'), (74, 'e'), (86, 'c'), (89, 'd'), (100, 'b')]
另外一种方法,可以直接使用sorted的key参数,来指定排序的依据。
>>> sorted(s.iteritems(), key=lambda x : x[1]) [('f', 62), ('a', 72), ('e', 74), ('c', 86), ('d', 89), ('b', 100)]
在本节中,这些小技巧要记住:
得到字典对象的键,值,键值对的方法是
dict.keys()
dict.values()
dict.items()
以上三种方法返回的都是列表,是比较占用资源的。如果需要进行优化,那么可以使用:
dict.iterkeys()
dict.itervalues()
dict.iteritems()
将他们变为生成器。