为了账号安全,请及时绑定邮箱和手机立即绑定

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

案例:
某班英语成以及字典形式存储,根据成绩高低计算排名。
解决方案:
使用内置函数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()在存储空间上更有优势

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消