如果我使用相同的键创建两个词典,它们似乎以相同的顺序返回值,即使没有排序词典。例如,如果我这样做:
dict1 = {"a":1, "b":2, "c":3, "d":4}
dict2 = {"a":10, "b":20, "c":30, "d":40}
zip(dict1.values(), dict2.values())
它给出了“期望的”输出:
[(1, 10), (3, 30), (2, 20), (4, 40)]
为什么会这样?我是否可以依赖两个具有相同键的字典,其值以相同的方式排序?
答案 0 :(得分:4)
密钥通常按相同顺序排列,但不保证。如果没有哈希值冲突,则密钥将按顺序排列。但是可能存在冲突,在这种情况下,插入顺序将影响密钥的顺序。
例如,1
和65
生成哈希冲突,因为字典的大小为2的幂(至少在我的机器上)。 1 % 8 == 65 % 8
,因此这两个键映射到相同的哈希表桶。
>>> {1: 'foo', 65: 'bar'}
{1: 'foo', 65: 'bar'}
>>> {65: 'bar', 1: 'foo'}
{65: 'bar', 1: 'foo'}
相同的词典但插入顺序不同意味着键的排序方式不同。
>>> {1: 'foo', 65: 'bar'} == {65: 'bar', 1: 'foo'}
True
这只是一个恰好(不)在我的Python版本上工作的例子。 Python语言没有指定键如何映射到散列桶。