这是我拥有的字典
propertyList = {
"id": "int",
"name": "char(40)",
"team": "int",
"realOwner": "int",
"x": "int",
"y": "int",
"description": "char(255)",
"port": "bool",
"secret": "bool",
"dead": "bool",
"nomadic": "bool",
"population": "int",
"slaves": "int",
}
但是当我用“ \ n”打印出来时,join(myDict)得到这个
name
nomadic
dead
port
realOwner
secret
slaves
team
y
x
population
id
description
我知道字典是无序的,但每次都会出现,而且我也不知道为什么。
#1 楼
对于旧版本的Python,真正的问题应该是“为什么不呢?” —无序字典通常实现为哈希表,其中元素的顺序定义明确,但不是立即显而易见的(用于说明此情况的Python文档)。您的观察结果完全符合哈希表的规则:明显的任意但恒定的顺序。Python从那以后更改了
dict
实现以保留插入顺序,并且从Python 3.7开始保证。因此,该实现不再构成纯哈希表(但在实现中仍使用哈希表)。评论
值得阅读python字典源文件中的注释;我已经将其发布在关于“您所见过的最佳评论”的stackoverflow帖子中:is.gd/iSyN
–llimllib
09年2月9日在6:05
dict的一些内部实现可以在laurentluce.com/posts/python-dictionary-implementation中找到。一位python编码人员提供了不错的演示文稿,但目前无法找到(我认为它来自PyCon Australia)。
– Maciej Gol
13年10月2日在9:07
#2 楼
内置字典类型的规范不保留任何顺序,最好将字典视为
key: value
对的无序集合... 您可能需要检查
OrderedDict
模块,它是带有关键字插入顺序的有序字典的实现。#3 楼
您可以依靠的关于字典排序的唯一事情是,如果不对字典进行任何修改,则排序将保持不变。例如,在不修改字典的情况下对字典进行两次迭代将导致相同的键序列。但是,尽管Python字典的顺序是确定性的,但是它可能会受到插入和删除顺序等因素的影响,因此相等的字典可能会以不同的顺序结束:>>> {1: 0, 2: 0}, {2: 0, 1: 0}
({1: 0, 2: 0}, {1: 0, 2: 0})
>>> {1: 0, 9: 0}, {9: 0, 1: 0}
({1: 0, 9: 0}, {9: 0, 1: 0})
评论
无序意味着订单与您无关。这并不意味着顺序不一致。@S。洛特:准确地。这就是我在CS课程中所教的内容-“无序集合将始终具有一定的顺序,无序意味着我们不应依赖它”
但是,如果您对订购感兴趣,那么这不是您应该寻找的数据结构。字典是项的无序集合。列表和元组保留顺序。
更精确:python字典的顺序是任意的,但是确定性的(根据python规范)。确定性意味着它总是会表现出相同的方式。
现在,我已经看到了这个问题,我建议您是否要保留顺序,可以将每个字典键值对放入一个元组/列表中,这样它们将始终具有相同的顺序