Skip to main content
 首页 » 编程设计

python之python 的字典排序有多可靠

2025年05月04日31langtianya

我需要快速散列一个字典(一个计数器),我注意到 python 似乎以相同的顺序对具有相同键的字典进行排序,即使它们的构造不同。事实上,字典似乎能够经受住相当多的滥用:

>>> D = {'a': 1, 'b': 2, 'c': 3} 
>>> list(D) 
['b', 'c', 'a'] 
>>> list(D) 
['b', 'c', 'a'] 
>>> list(D) 
['b', 'c', 'a'] 
>>> list(D) 
['b', 'c', 'a'] 
>>> E = {'a': 1, 'b': 2, 'c': 3} 
>>> list(E) 
['b', 'c', 'a'] 
>>> list(E) 
['b', 'c', 'a'] 
>>> list(E) 
['b', 'c', 'a'] 
>>> F = {'a': 1, 'b': 2, 'c': 3} 
>>> list(F) 
['b', 'c', 'a'] 
>>> list(F) 
['b', 'c', 'a'] 
>>> list(F) 
['b', 'c', 'a'] 
>>> list(F) 
['b', 'c', 'a'] 
>>> G = {'a': 1, 'b': 2, 'c': 3, 'd': 4} 
>>> list(G) 
['b', 'c', 'a', 'd'] 
>>> list(G) 
['b', 'c', 'a', 'd'] 
>>> list(G) 
['b', 'c', 'a', 'd'] 
>>> list(F) 
['b', 'c', 'a'] 
>>> F.pop('a') 
1 
>>> list(F) 
['b', 'c'] 
>>> F['a'] = 2 
>>> list(F) 
['b', 'c', 'a'] 
>>> list(F) 
['b', 'c', 'a'] 
>>> H = {'b': 2, 'a': 1, 'c': 3} 
>>> list(H) 
['b', 'c', 'a'] 
>>> H = {'b': 2, 'c': 1, 'a': 3} 
>>> list(H) 
['b', 'c', 'a'] 
>>> K = {'b': 2, 'c': 1, 'a': 3, 'd': 4} 
>>> list(K) 
['b', 'c', 'a', 'd'] 
>>> K = {'b': 2, 'c': 1, 'd': 3, 'a': 4} 
>>> list(K) 
['b', 'c', 'a', 'd'] 

那么我的问题是,如果我的字典具有相同的键和相同的值,我是否可以指望键的顺序相同,至少在运行的 python 实例的生命周期内如此? 请注意,我知道 python 在如何决定对字典进行排序方面有点难以理解,但我想知道如果给定相同的输入,相同的 python 实例每次都会返回相同的键排序。

请您参考如下方法:

常规的 python 字典没有排序。永远无法保证当您获得 key 列表时,它们将按照您期望的顺序排列。

如果你想保持顺序,使用有序字典。

https://docs.python.org/2/library/collections.html#collections.OrderedDict