0

リストから辞書を作成したい

>>> list=['a',1,'b',2,'c',3,'d',4]
>>> print list
['a', 1, 'b', 2, 'c', 3, 'd', 4]

dict() を使用してリストから辞書を作成しましたが、結果が期待どおりの順序ではありません。

>>> d = dict(list[i:i+2] for i in range(0, len(list),2))
>>> print d
{'a': 1, 'c': 3, 'b': 2, 'd': 4}

結果がリストのように順番に並んでいると期待しています。

{'a': 1, 'b': 2, 'c': 3, 'd': 4}

皆さん、アドバイスをお願いできますか?

4

3 に答える 3

4

辞書には順序がありませんcollections.OrderedDict。順序を維持したい場合に使用します。また、インデックスを使用する代わりに、iterator.

>>> from collections import OrderedDict
>>> lis = ['a', 1, 'b', 2, 'c', 3, 'd', 4]
>>> it = iter(lis)
>>> OrderedDict((k, next(it)) for k in it)
OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
于 2013-08-24T09:50:03.050 に答える
4

grouper レシピ:を使用してzip(*[iterable]*n)、アイテムを次のグループにまとめることができますn:

In [5]: items = ['a',1,'b',2,'c',3,'d',4]

In [6]: items = iter(items)

In [7]: dict(zip(*[items]*2))
Out[7]: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

PS。list同じ名前のビルトイン (型) を隠してしまうため、 variable に名前を付けないでください。

ハタのレシピは使いやすいですが、説明が少し難しいです。

a 内の項目dictは順不同です。したがって、特定の順序で辞書アイテムが必要な場合は、collections.OrderedDictを使用します(falsetru が既に指摘したように):

In [13]: collections.OrderedDict(zip(*[items]*2))
Out[13]: OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
于 2013-08-24T09:50:21.463 に答える