为什么字典似乎被颠倒了?

时间:2010-02-18 19:38:02

标签: python dictionary

为什么python中的字典会出现反转?

>>> a = {'one': '1', 'two': '2', 'three': '3', 'four': '4'}
>>> a
{'four': '4', 'three': '3', 'two': '2', 'one': '1'}

我该如何解决这个问题?

6 个答案:

答案 0 :(得分:16)

python中的字典(以及一般的哈希表)是无序的。在python中,您可以使用键上的sort()方法对它们进行排序。

答案 1 :(得分:5)

字典没有固有的顺序。您必须滚动自己的有序dict实现,使用ordered list of tuples或使用existing ordered dict implementation

答案 2 :(得分:5)

Python3.1 有一个 OrderedDict

>>> from collections import OrderedDict
>>> o=OrderedDict([('one', '1'), ('two', '2'), ('three', '3'), ('four', '4')])
>>> o
OrderedDict([('one', '1'), ('two', '2'), ('three', '3'), ('four', '4')])
>>> for k,v in o.items():
...  print (k,v)
... 
one 1
two 2
three 3
four 4

答案 3 :(得分:2)

现在您知道dicts是无序的,这里是如何将它们转换为您可以订购的列表

>>> a = {'one': '1', 'two': '2', 'three': '3', 'four': '4'}
>>> a
{'four': '4', 'three': '3', 'two': '2', 'one': '1'}

按键排序

>>> sorted(a.items())
[('four', '4'), ('one', '1'), ('three', '3'), ('two', '2')]

按值排序

>>> from operator import itemgetter
>>> sorted(a.items(),key=itemgetter(1))
[('one', '1'), ('two', '2'), ('three', '3'), ('four', '4')]
>>> 

答案 4 :(得分:0)

您期望的“标准订单”是什么?它非常依赖于应用程序。 python字典不保证密钥排序。

在任何情况下,您都可以按照自己想要的方式迭代字典键()。

答案 5 :(得分:0)

来自Python Tutorial

  

最好将字典视为   一组无序的键:值对

来自Python Standard Library(关于dict.items):

  

CPython实现细节:密钥   和值以任意方式列出   非随机的订单会有所不同   跨Python实现,和   取决于字典的历史   插入和删除。

因此,如果您需要按特定顺序处理字典,请对键或值进行排序,例如:

>>> sorted(a.keys())
['four', 'one', 'three', 'two']
>>> sorted(a.values())
['1', '2', '3', '4']