码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-11-15 20:12:08      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:item   imp   lse   转化   函数   列表解析   from   abc   ever   

将字典中的各项转换为元组,使用内置函数sorted排序

#元组可以比较大小
(3, 2) > (1, 4) #返回True,3 > 1
(3, 2) > (3, 4) #返回False,2 < 4

方案1:将字典中的项转化为(值,键)元组。(列表解析或zip)

#1.列表解析
from random import randint
d = {k: randint(60, 100) for k in 'abcdefgh'} #产生数据
l = [(v, k) for k, v in d.items()] #列表解析
sorted(l, reverse=True) #倒序

执行结果:

[(97, 'e'),
 (92, 'g'),
 (87, 'b'),
 (83, 'c'),
 (76, 'f'),
 (70, 'd'),
 (68, 'h'),
 (66, 'a')]
#2.zip函数
list(zip([1, 2, 3], [4, 5, 6])) #zip函数返回的生成器对象传递给list构造器
l = list(zip(d.values(), d.keys()))
sorted(l, reverse=True)

执行结果:

[(99, 'e'),
 (87, 'h'),
 (87, 'a'),
 (85, 'f'),
 (81, 'd'),
 (79, 'g'),
 (75, 'b'),
 (60, 'c')]

方案2:传递sorted函数的key参数

d = {k: randint(60, 100) for k in 'abcdefgh'}
p = sorted(d.items(), key=lambda item: item[1], reverse=True)
d = {k: (i, v) for i, (k, v) in enumerate(p, 1)} #字典解析
d

执行结果:

{'b': (1, 93),
 'f': (2, 90),
 'd': (3, 76),
 'a': (4, 70),
 'g': (5, 69),
 'h': (6, 68),
 'c': (7, 62),
 'e': (8, 60)}

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

标签:item   imp   lse   转化   函数   列表解析   from   abc   ever   

原文地址:https://www.cnblogs.com/huowuyan/p/11869087.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!