4

我可以期望 keys() 保持相同的顺序吗?

我计划将它们用于下拉框,如果我从字典中添加或删除项目,我不希望它们移动。

4

6 回答 6

5

不,根据文档

键和值以非随机的任意顺序列出,在 Python 实现中有所不同,并且取决于字典的插入和删除历史。

于 2012-06-23T06:10:15.657 回答
3

dict不保证a 中键的顺序。

文档说:

最好将字典视为一组无序的键:值对,并要求键是唯一的(在一个字典中)...

keys()字典对象的方法以任意顺序返回字典中使用的所有键的列表(如果要对其进行排序,只需将sorted()函数应用于它)。

Python 2.7+ 和 3.1+ 具有 PE​​P 372所描述的OrderedDictcollections,它完全符合您的要求。它会记住添加键的顺序:

>>> from collections import OrderedDict
>>> od = OrderedDict()
>>> od[1] = "one"
>>> od[2] = "two"
>>> od[3] = "three"
>>> od.keys()
[1, 2, 3]
于 2012-06-23T06:55:37.417 回答
1

不,至少在 cpython 中(很可能是所有其他实现)你绝对不能。如果您想要有保证的订单,请查看odict,它确实保证了订单。

于 2012-06-23T06:10:37.863 回答
1

不,不是从一天到下一天。keys() 将按任意顺序排列(尽管我认为它们在实例的生命周期内可能是一致的,但这不适用于您的菜单)。

Python3 有有序字典:collections.OrderedDict 文档

于 2012-06-23T06:11:55.883 回答
1

来自python 文档

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

因此,解决此问题的一种方法是在“列出”它们后立即对它们进行排序。

于 2012-06-23T06:17:03.840 回答
0

您可能想尝试诸如字典或对象数组之类的东西。数组是有序的。菜单项的文本将位于数组或对象的某个字段中。

于 2012-06-23T06:12:13.573 回答