为什么python对我的字典如此排序?

2024-09-27 07:28:36 发布

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

这是我的字典

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

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


Tags: nameidsecret字典portdescriptionteamint
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})

对于较旧版本的Python,真正的问题应该是“为什么不呢?“-无序字典通常被实现为hash table,其中元素的顺序是定义良好的,但不是立即可见的(the Python documentation used to state this)。您的观察结果与哈希表的规则完全匹配:显然是任意的,但顺序是恒定的。

此后,Python更改了其dict实现以保留插入顺序,并this is guaranteed as of Python 3.7。因此,实现不再构成纯散列表(但在实现中仍使用散列表)。

内置字典类型的specification 不保留任何顺序,最好将字典看作是一组无序的key: value对。。。

您可能需要检查^{} module,这是一个具有键插入顺序的有序字典的实现。

相关问题 更多 >

    热门问题