如何根据字典中值的大小, 对字典中的项排序
Posted huowuyan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何根据字典中值的大小, 对字典中的项排序相关的知识,希望对你有一定的参考价值。
将字典中的各项转换为元组,使用内置函数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)}
以上是关于如何根据字典中值的大小, 对字典中的项排序的主要内容,如果未能解决你的问题,请参考以下文章
python 小技巧, 如何根据字典中的值的大小,对字典中的项排序