如何在不使用 Ordereddict 的情况下对 Python 字典进行按键排序?

How can I sort a Python dictionary sort by key without using Ordereddict?

出发的好方法是什么
{2:3, 1:89, 4:5, 2:0}

{1:89, 2:3, 2:0, 3:0} ?

你要的东西是不可能的,因为字典按照定义不是线性的东西,就像数学集合一样。可能它使用某种树结构实习生,但实习生如何工作并不重要,可能会改变并且可能因实施而异。

另一方面,您可以生成字典的有序表示,例如将其打印出来以显示给用户。一种可能性是使用 list of tuples. You can get a list of all items of dictionary with dict.items(). You can use list.sort() 对列表进行排序。

首先,你不能在字典中有重复的键,无论是有序的还是其他的!您有两次密钥 2。创建字典时,这两个值之一将立即丢失。

好的,假设所有的键都是唯一的。你永远不应该依赖字典中的项目顺序:

CPython implementation detail: Keys and values are listed in an arbitrary order which is non-random, varies across Python implementations, and depends on the dictionary’s history of insertions and deletions.

(来自 the docs

这就是有 OrderedDict 的原因。继 OrderedDict 之后下一个最好的东西是什么?我猜是这样的:

>>> d = {2:3, 1:89, 4:5, 2:0, 50: 5, 6: 6}

>>> d  # lost "2:3" pair!
{1: 89, 2: 0, 4: 5, 50: 5, 6: 6}

>>> l = d.items()

>>> l
[(1, 89), (2, 0), (4, 5), (50, 5), (6, 6)]

>>> l.sort()

>>> l
[(1, 89), (2, 0), (4, 5), (6, 6), (50, 5)]

这是一个键值对列表。由您负责从中获取值等。重要的是 永远不要 dict(l) 因为这可能会改变项目的顺序。即使它看起来有效,也不要这样做! (公平地说:你可以做到,只是不要依赖结果字典中的项目顺序。或者在与此相关的任何其他字典中,如上面的引文所述。)

您可以在 class 中实现它,但是您将重新发明 OrderedDict class,并且可能不太好。


出于好奇:为什么你不能使用 OrderedDict?