如果你想要一个保持排序顺序的字典,你需要一个不同的数据结构。如果您搜索 PyPI,您会发现各种选项。
其中一些构建在为此类事物设计的数据结构之上(红黑树、B 树、跳过列表),因此它们可以很快完成所有操作。其他人的工作方式是每次修改它们时重新排序(或者做一个更聪明的变体——在一次或多次修改后每次访问它们时重新排序)。
我不想特别推荐一个并阻止您阅读其中的一些,所以我将展示如何使用搜索中返回的第一个,sorteddict
我从未使用过:
sd = sorteddict.sorteddict({
u'key1': {'a': 'name', 'number': 282},
u'key2': {'a': 'name2','number': 1421},
u'key3': {'a': 'name3', 'number': 95},
}, key=operator.itemgetter('number'))
但是,如果您只是一次构建 dict 并且从不修改它,那么使用 an 会更容易(并且可能更快)OrderedDict
,如inspectorG4dget 的回答中所述。只需先将键和值按排序顺序排列即可。甚至sorted
可以为你做这件事:
od = collections.OrderedDict(sorted(d.items(), key=lambda item: item[1]['number']))
如果您想手动执行此操作,您可以使用“索引列表”来执行此操作:您按顺序构建或维护的键列表(或OrderedDict
或sortedlist
或sorteddict
),并用于查找要查找的键。但是实际上没有充分的理由这样做,除非您需要有多种方法来索引相同的映射(或了解如何OrderedDict
在幕后工作 - 但为此,首先阅读从文档链接的 Py2.4配方的有序字典)。