如果没有排序字典,为什么具有相同键名的两个字典以相同的顺序返回值?

时间:2015-07-17 15:53:59

标签: python dictionary

如果我使用相同的键创建两个词典,它们似乎以相同的顺序返回值,即使没有排序词典。例如,如果我这样做:

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)]

为什么会这样?我是否可以依赖两个具有相同键的字典,其值以相同的方式排序?

1 个答案:

答案 0 :(得分:4)

密钥通常按相同顺序排列,但不保证。如果没有哈希值冲突,则密钥将按顺序排列。但是可能存在冲突,在这种情况下,插入顺序将影响密钥的顺序。

例如,165生成哈希冲突,因为字典的大小为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语言没有指定键如何映射到散列桶。