python - 将字典插入字典的排序列表
问题描述
我一直在尝试在保持顺序的同时将新字典插入到排序的字典列表中。对我使用过的字典列表进行排序sample_dict = sorted(sample_dict, key=lambda k: k['ID'])
似乎唯一的解决方案是遍历列表并将每个条目的 ID 与前一个条目进行比较,但这个解决方案听起来不是最优的(时间方面)。我还找到了bisect库,它允许在列表中插入条目,同时保持正确的顺序,但它似乎不适用于字典( throws TypeError: '<' not supported between instances of 'dict' and 'dict'
)。我还想提一下,我的条目包含很多键值对(21),我不确定是否有任何替代字典(例如元组)。最后,我想提一下“ID”是一个字符串。
提前致谢
解决方案
不幸的是bisect
,不允许您key
像 dos 一样提供参数sorted
。但是通过保存元组列表而不是字典很容易绕过它。元组上的小于是逐个元素比较的,所以如果元组的第一个元素是你的键,那么一切正常。
sample_dict = sorted(((k['ID'], k) for k in sample_dict))
正如评论中提到的,如果两个列表项具有相同的 ID,这仍然会失败,因为比较会转移到第二个元组元素。解决方案是添加另一个保证永远不会相等的元组元素。
sample_dict = sorted(((k['ID'], index, k) for index,k in enumerate(sample_dict)))
推荐阅读
- python - 满足条件时更改 PyQt5 QTableWidget 行样式表
- delphi - 在 Delphi 10.3.3 中使用 RTTI 收集一个类的所有后代
- javascript - 如何通过按一个键或最好是 2 个键在 Chrome/Firefox 上启动网站
- javascript - 用于检查重复的正则表达式
- vba - 代码运行正常,但单步执行时出错
- javascript - Google Sheets + Monday.com API - 更改列值
- python - Python多维数组和concaconate/append
- javascript - 优化 Socket io
- python - 如何将for循环与if分开
- python - 使用 Python 将 CSV 转换为嵌套 JSON