为什么python会像这样订购我的字典?

时间:2009-02-08 18:03:47

标签: python dictionary

这是我的词典

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

我知道字典是无序的,但每次出现都是一样的,我不知道为什么。

3 个答案:

答案 0 :(得分:79)

对于旧版本的Python,真正的问题应该是“为什么不呢?” - 无序字典通常实现为hash table,其中元素的顺序是明确定义的但不是立即明显的({{3 }})。您的观察完全符合哈希表的规则:明显的任意,但是不变的顺序。

Python已经改变了它的dict实现以保留插入顺序,the Python documentation used to state this。因此,实现不再构成纯哈希表(但是哈希表在其实现中仍然使用)。

答案 1 :(得分:10)

内置字典类型的specification 不承认任何保留秩序,最好将字典视为一组无序的key: value对......

您可能需要查看OrderedDict module,这是带有密钥插入顺序的有序字典的实现。

答案 2 :(得分:8)

您可以依赖的字典排序唯一的一点是,如果没有对字典进行修改,顺序将保持不变;例如,在不修改字典的情况下迭代字典两次将导致相同的键序列。但是,尽管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})