python - 在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)
解决方案
您可以从计算每个值出现的次数开始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)
结果元组列表即可。
推荐阅读
- ejs - NestJs 电子邮件无法使用 ejs 模板动态数据发送
- path - 有没有办法修复 Nunjucks 将文件扩展名更改为 .html?
- python - 从单词中获取词素(包括词干)的最佳 Python 库是什么?
- xamarin - 带有 xamarin 表单的 zxing 扫描仪适用于颠倒的移动设备
- angular - Angular 中的单元测试无法读取属性
- java - 如何正确处理底部导航视图中的片段切换
- amazon-elastic-beanstalk - 在没有公有子网的私有子网中运行 Amazon ElasticBeanstalk 实例
- java - 我们可以在java中使用selenium同时操作多个选项卡吗?
- python - np.arange 中的行为不一致?
- google-cloud-dataflow - Apache 光束窗口/触发数据流,使用 elementCountAtLeast 未按预期发出