首页 > 解决方案 > 在python中按值对字典进行排序

问题描述

这是我的字典:

d = {'jan': 50, 'feb': 30, 'march': 60, 'april': 50, 'may': 50, 'june': 60, 'july': 20}

我期待这样的输出:

d = {'jan': 50, 'april': 50, 'may': 50, 'march': 60, 'june': 60, 'feb': 30, 'july': 20}

当我运行这个程序时,我得到的输出与预期不同:

d = {'jan': 50, 'feb': 30, 'march': 60, 'april': 50, 'may': 50, 'june': 60, 'july': 20}
sortlist = sorted(d, key=d.get)
print(sortlist)

标签: pythonsortingdictionary

解决方案


您可以从计算每个值出现的次数开始collections.Counter

from collections import Counter
c = Counter(d.values())
# Counter({20: 1, 30: 1, 50: 3, 60: 2})

key现在使用in对字典进行排序,查找每个值出现的次数sorted

sorted(d.items(), key=lambda x: c[x[1]], reverse=True)
[('jan', 50), ('april', 50), ('may', 50), ('march', 60), ('june', 60), 
 ('feb', 30), ('july', 20)]

但是请注意,如果您从结果中获取字典,则不会保留顺序,因为字典没有顺序。

因此,您可以使用collections.OrderedDict的一件事是保持顺序,只需调用OrderedDict(res)结果元组列表即可。


推荐阅读