-1

可能重复:
python 以什么顺序显示字典键?

我试图回答这个非常奇怪的 Python 问题(在 SO 上,但看起来作者删除了它)。这让我大吃一惊,我似乎无法合理地解释自己是什么原因导致了这种令人困惑的现象。我有一个 Python 字典(关联数组),我初始化如下。

d = {"word1": 1, "word2": 2, "word3": 3}

并使用 for..in 构造循环遍历它,在该构造中我打印由空格分隔的“d”键。 预期输出:word1 word2 word3
实际输出:word1 word3 word2

然后我尝试将“d”打印为

打印 d

输出

{'word1':1,'word3':3,'word2':2}

我正在扫描在线 Python 文档、SO 上的现有调查问卷、博客,但完全找不到原因。我在这里错过了什么吗?此外,请所有对这个问题投反对票的人请详细说明原因。

干杯。:-)

4

3 回答 3

5

Python dict does not guarantee any particular ordering of its keys.

collections.OrderedDict preserves the insertion order of its keys.

于 2012-05-22T15:19:16.650 回答
4

The keys in a Python dictionary are not sorted.

for key in sorted(d):
    print key,

prints word1 word2 word3 as expected.

于 2012-05-22T15:18:31.313 回答
4

从文档中:

最好将字典视为一组无序的键:值对,并要求键是唯一的(在一个字典中)。一对大括号创建一个空字典:{}。在大括号内放置一个逗号分隔的键:值对列表,将初始键:值对添加到字典中;这也是在输出上编写字典的方式。

字典上的主要操作是存储带有某个键的值并提取给定键的值。也可以使用 del 删除键:值对。如果您使用已在使用的密钥进行存储,则与该密钥关联的旧值将被遗忘。使用不存在的键提取值是错误的。

字典对象的 keys() 方法以任意顺序返回字典中使用的所有键的列表(如果要对其进行排序,只需对其应用 sorted() 函数)。要检查单个键是否在字典中,请使用 in 关键字。

http://docs.python.org/tutorial/datastructures.html

最后一段说明了一切。

于 2012-05-22T15:28:19.180 回答