首页 > 解决方案 > 将字典插入字典的排序列表

问题描述

我一直在尝试在保持顺序的同时将新字典插入到排序的字典列表中。对我使用过的字典列表进行排序sample_dict = sorted(sample_dict, key=lambda k: k['ID']) 似乎唯一的解决方案是遍历列表并将每个条目的 ID 与前一个条目进行比较,但这个解决方案听起来不是最优的(时间方面)。我还找到了bisect库,它允许在列表中插入条目,同时保持正确的顺序,但它似乎不适用于字典( throws TypeError: '<' not supported between instances of 'dict' and 'dict')。我还想提一下,我的条目包含很多键值对(21),我不确定是否有任何替代字典(例如元组)。最后,我想提一下“ID”是一个字符串。

提前致谢

标签: pythonlistsortingdictionaryinsert

解决方案


不幸的是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)))

推荐阅读