python 高级进阶之字典排序

实际案列:
某班数学成绩以字典形式存储为:{'Tom': 88, 'Jack': 90, 'Rose': 100...},想要根据成绩来进行排序。

  • 方法一:
    可以通过 zip 函数,将字典转化为一个元组:
In [1]: from random import randint

In [2]: s = {x: randint(60, 100) for x in 'ABCDEF'}

In [3]: s
Out[3]: {'A': 87, 'B': 99, 'C': 62, 'D': 67, 'E': 97, 'F': 89}

In [4]: s.keys()
Out[4]: ['A', 'C', 'B', 'E', 'D', 'F']

In [5]: s.values()
Out[5]: [87, 62, 99, 97, 67, 89]

# 小技巧:可以使用s.iterkeys()和s.itervalues()来提高程序的运行效率

In [6]: zip(s.itervalues(), s.iterkeys())
Out[6]: [(87, 'A'), (62, 'C'), (99, 'B'), (97, 'E'), (67, 'D'), (89, 'F')]

In [7]: sorted(zip(s.itervalues(), s.iterkeys()))
Out[7]: [(62, 'C'), (67, 'D'), (87, 'A'), (89, 'F'), (97, 'E'), (99, 'B')]
  • 方法二:
    使用内置的 sorted 函数的 key 参数,来指定排序的依据。默认的
    sorted 函数用在字典中,仅对字典的键进行排序,而不考虑值。
In [8]: sorted(s)
Out[8]: ['A', 'B', 'C', 'D', 'E', 'F']

In [9]: sorted(s.iteritems(), key=lambda x: x[1])
Out[9]: [('C', 62), ('D', 67), ('A', 87), ('F', 89), ('E', 97), ('B', 99)]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,674评论 1 118
  • 86.复合 Cases 共享相同代码块的多个switch 分支 分支可以合并, 写在分支后用逗号分开。如果任何模式...
    无沣阅读 1,481评论 1 5
  • 教程总纲:http://www.runoob.com/python/python-tutorial.html 进阶...
    健康哥哥阅读 2,099评论 1 3
  • 當下所有的一切都是自己吸引過來,心裡想什麼就吸引什麼,喜歡什麼就吸引什麼,有時候當事情發生的時候自己都不知...
    盛世贏家葉小華阅读 180评论 0 0
  • Dear,你现在应该还在逛街才对,我好不容易把那篇3000字的report收尾,等改天最后排版就好。弄完这篇rep...
    阿闲阅读 336评论 0 1