我需要快速散列一个字典(一个计数器),我注意到 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
