【发布时间】:2020-12-31 12:17:24
【问题描述】:
在 Python 3.7+ 中,dict literals 是否保持键的顺序?例如,是否保证 {1: "one", 2: "two"} 在迭代时总是以这种方式(1,然后 2)排序其键? (有一个thread in the Python mailing list 有类似的主题,但它四面八方,我找不到答案。)
类似地,像dict([('sape', 4139), ('guido', 4127), ('jack', 4098)]) 这样的字典是否在列表中排序?
other naturally ordered constructions 也有同样的问题,比如字典理解和dict(sape=4139, guido=4127, jack=4098)。
PS:据记载dictionaries preserve insertion order。因此,这个问题本质上是在问:是否保证数据按 dict 文字的顺序、列表给dict() 的顺序插入,等等。
【问题讨论】:
-
这取决于插入的顺序。见stackoverflow.com/questions/39980323/…。
-
您正在阅读他们对字典顺序保留做出最终决定之前的一个帖子。他们现在保持秩序。
-
这能回答你的问题吗? Are dictionaries ordered in Python 3.6+?
-
糟糕,我错过了 PS,还以为你不知道它们是按插入顺序排列的。相反,这是否回答了您的问题? How to keep keys/values in same order as declared?
-
@EricOLebigot:PEP 520 和 PEP 468 的结果,都包含在the 3.6 What's New docs 中。 520个保证类属性定义的顺序,468个保留关键字参数顺序。两者都是新紧凑型
dict实现的副作用,但与dicts 的一般顺序保留方面不同,它们在 3.6 中成为语言规范的一部分,而不仅仅是实现细节。
标签: python dictionary literals