继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

如何根据字典中值的大小,对字典中的项排序

Kaiz不是
关注TA
已关注
手记 4
粉丝 4
获赞 4

案例:
某班英语成以及字典形式存储,根据成绩高低计算排名。
解决方案:
使用内置函数sorted(),比手工算法要快,因为排序算法优,内置函数用c语言实现,速度快。
1.利用zip将字典数据转化为元组
2.传递sorted()函数的key参数

In [1]: sorted([9, 1, 2, 8, 5])
Out[1]: [1, 2, 5, 8, 9]

In [2]: from random import randint

In [3]: {x: randint(60,100) for x in 'xyzabc'}
Out[3]: {'a': 74, 'b': 99, 'c': 99, 'x': 81, 'y': 74, 'z': 92}

In [4]: d = {x: randint(60,100) for x in 'xyzabc'}

In [5]: sorted(d)
Out[5]: ['a', 'b', 'c', 'x', 'y', 'z']

In [6]: iter(d)
Out[6]: <dictionary-keyiterator at 0x1fab838>

In [7]: list(iter(d))
Out[7]: ['a', 'c', 'b', 'y', 'x', 'z']

In [8]: (97, 'a') > (69,'b')
Out[8]: True

In [9]: (97, 'a') > (97,'b')
Out[9]: False

In [10]: d.keys()
Out[10]: ['a', 'c', 'b', 'y', 'x', 'z']

In [11]: d.values()
Out[11]: [84, 98, 82, 92, 74, 68]

In [12]: zip(d.values(),d.keys())
Out[12]: [(84, 'a'), (98, 'c'), (82, 'b'), (92, 'y'), (74, 'x'), (68, 'z')]

In [13]: zip(d.itervalues(),d.iterkeys())
Out[13]: [(84, 'a'), (98, 'c'), (82, 'b'), (92, 'y'), (74, 'x'), (68, 'z')]

In [14]: sorted(zip(d.itervalues(),d.iterkeys()))
Out[14]: [(68, 'z'), (74, 'x'), (82, 'b'), (84, 'a'), (92, 'y'), (98, 'c')]

In [15]: d.items()
Out[15]: [('a', 84), ('c', 98), ('b', 82), ('y', 92), ('x', 74), ('z', 68)]

In [16]: sorted(d.items(),key=lambda x: x[1])
Out[16]: [('z', 68), ('x', 74), ('b', 82), ('a', 84), ('y', 92), ('c', 98)]

In [17]: sorted(d.items(),key=lambda x: x[0])
Out[17]: [('a', 84), ('b', 82), ('c', 98), ('x', 74), ('y', 92), ('z', 68)]

小结:
直接sorted():并非按值,而是按键排序
d.values()比d.itervalues()在存储空间上更有优势

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP