如何在不使用 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?
从
出发的好方法是什么{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?