我可以期望keys()保持相同的顺序吗?
我计划将它们用于下拉框,如果我在字典中添加或删除项目,我不希望它们转移。
答案 0 :(得分:5)
没有。根据{{3}}:
键和值以任意顺序列出,这是非随机的,在Python实现中各不相同,并且取决于字典的插入和删除历史。
答案 1 :(得分:3)
无法保证dict
中的密钥排序。
最好将字典视为无序键组:值对,并要求键是唯一的(在一个字典中)...
字典对象的
keys()
方法以任意顺序返回字典中使用的所有键的列表(如果要对其进行排序,只需应用sorted()
功能)。
Python 2.7+和3.1+将OrderedDict
class in collections
作为described by PEP 372,它完全符合您的要求。它会记住添加密钥的顺序:
>>> from collections import OrderedDict
>>> od = OrderedDict()
>>> od[1] = "one"
>>> od[2] = "two"
>>> od[3] = "three"
>>> od.keys()
[1, 2, 3]
答案 2 :(得分:1)
没有。至少在cpython中(很可能是其他所有实现)you definitely can't。如果您需要保证订单,请查看odict
,这确保了订单。
答案 3 :(得分:1)
不,不是从一天到下一天。 keys()将以任意顺序排列(虽然我认为它们可能在实例的生命周期内保持一致,但这对您的菜单不起作用)。
Python3订购了字典:collections.OrderedDict documentation
答案 4 :(得分:1)
来自python docs:
字典对象的 keys()方法以任意顺序返回字典中使用的所有键的列表(如果要对其进行排序,只需应用 sorted() 功能)。
因此解决这个问题的一种方法是在你“彻底”解决问题后立即对密钥进行排序。它们。
答案 5 :(得分:0)
您可能想尝试类似字典或对象的数组。数组是有序的。菜单项的文本将位于数组或对象的某个字段中。