1

因为我想将 dict 解码为 json,但我发现输出顺序不是我想要的,然后我做了这样的测试:

a = {'a':'1st','ab':'2nd'}
print(a)
a = {'b':'1st','bc':'2nd'}
print(a)
a = {'c':'1st','cd':'2nd'}
print(a)
a = {'d':'1st','de':'2nd'}
print(a)
a = {'e':'1st','ef':'2nd'}
print(a)
a = {'f':'1st','fg':'2nd'}
print(a)

输出是

{'a': '1st', 'ab': '2nd'}
{'b': '1st', 'bc': '2nd'}
{'c': '1st', 'cd': '2nd'}
{'de': '2nd', 'd': '1st'}
{'ef': '2nd', 'e': '1st'}
{'fg': '2nd', 'f': '1st'}

因为 d 在 ascii 中是 100?

如何解释?我可以更改迭代顺序吗?

4

2 回答 2

5

字典不是在 Python 中排序的。如果要排序字典,请使用OrderedDict

>>> from collections import OrderedDict
>>> a = OrderedDict((('f','1st'),('fg','2nd')))
>>> a
OrderedDict([('f', '1st'), ('fg', '2nd')])

但是,为了构造一个OrderedDict,您需要使用一个保留其排序顺序的对象,例如 alist或 a tuple

于 2012-09-01T08:11:01.337 回答
1

dict项目没有顺序。无论出现什么顺序都是一个实现细节——你不能指望它。

如果您需要订购商品,请使用collections.OrderedDict(在 Python 2.7 中引入)。

In [1]: import collections
In [9]: a = collections.OrderedDict([('d', '1st'), ('de', '2nd')])

In [10]: a
Out[10]: OrderedDict([('d', '1st'), ('de', '2nd')])
于 2012-09-01T08:10:41.600 回答