案例:
某班英语成以及字典形式存储,根据成绩高低计算排名。
解决方案:
使用内置函数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 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦