为什么python中的字典会出现反转?
>>> a = {'one': '1', 'two': '2', 'three': '3', 'four': '4'}
>>> a
{'four': '4', 'three': '3', 'two': '2', 'one': '1'}
我该如何解决这个问题?
答案 0 :(得分:16)
python中的字典(以及一般的哈希表)是无序的。在python中,您可以使用键上的sort()
方法对它们进行排序。
答案 1 :(得分:5)
字典没有固有的顺序。您必须滚动自己的有序dict实现,使用ordered list
of tuple
s或使用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 Standard Library(关于dict.items):
CPython实现细节:密钥 和值以任意方式列出 非随机的订单会有所不同 跨Python实现,和 取决于字典的历史 插入和删除。
因此,如果您需要按特定顺序处理字典,请对键或值进行排序,例如:
>>> sorted(a.keys())
['four', 'one', 'three', 'two']
>>> sorted(a.values())
['1', '2', '3', '4']