通过字典键获得的列表顺序()

时间:2012-06-23 06:08:11

标签: python

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

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

6 个答案:

答案 0 :(得分:5)

没有。根据{{​​3}}:

  

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

答案 1 :(得分:3)

无法保证dict中的密钥排序。

The documentation says:

  

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

     

字典对象的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)

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