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はアスキーで100だから?

どのように説明しますか? iter の順序を変更できますか?

4

2 に答える 2

5

辞書は Python ではソートされません。ソートされた辞書が必要な場合は、次を使用しますOrderedDict

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

ただし、を構築するには、や のOrderedDictようにソート順を保持するオブジェクトを使用する必要があります。listtuple

于 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 に答える