为什么字典中的项目顺序在Python中发生了变化?

Cha*_*ame 5 python dictionary

我正在尝试从一些教程中学习Python.这是我遇到的一个简单的例子,让我感到困惑.

>>> d={"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}

>>> d
{'pwd': 'secret', 'database': 'master', 'uid': 'sa', 'server': 'mpilgrim'}

>>> d.keys()
['pwd', 'database', 'uid', 'server']

>>> d.values()
['secret', 'master', 'sa', 'mpilgrim']
Run Code Online (Sandbox Code Playgroud)

正如您在我定义字典的第一行中所看到的,该项是字典"pwd":"secret"中的最后一个元素.但是,当我输出字典时,它成为第一个元素.字典的其余部分已经重新排序.

我可以知道为什么会这样吗?

如果我使用dict.keys()从字典中提取密钥并按照我认为的顺序迭代它,那会导致不匹配问题吗?

glg*_*lgl 6

我可以知道为什么会这样吗?

这是因为dicts的内部组织方式.

简而言之,这通过散列表来工作,该散列表根据它们的hash()值将密钥放入桶中.

如果我使用dict.keys()从字典中提取密钥并按照我认为的顺序迭代它,那会导致不匹配问题吗?

取决于你如何做.

k = list(d.keys())
k.sort()
for i in k: print i, d[i]
Run Code Online (Sandbox Code Playgroud)

应该按照你希望它的工作方式运作.


Bre*_*yer 5

如果要保持插入顺序,可以使用OrderedDict。但是常规dict对象通过散列键并将其用于查找来存储值,这不会保持顺序,但会使查找更快。