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

2024-03-29 08:02:15 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我用相同的键创建两个字典,看起来它们返回值的顺序是一样的,即使字典没有顺序。例如,如果我这样做:

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

为什么会这样?我能一直指望两个具有相同键的字典以相同的方式排列它们的值吗?你知道吗


Tags: 字典顺序方式zipvalues返回值dict1dict2
1条回答
网友
1楼 · 发布于 2024-03-29 08:02:15

钥匙的顺序通常是一样的,但不能保证。如果没有哈希值冲突,则键将按顺序排列。但是可能会发生碰撞,在这种情况下,插入顺序会影响键的顺序。你知道吗

例如,165由于字典的大小是2的幂(至少在我的机器上)而生成哈希冲突。1 % 8 == 65 % 8,所以这两个键映射到同一个哈希表bucket。你知道吗

>>> {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语言没有指定键如何映射到散列桶。你知道吗

相关问题 更多 >