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 recipe :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,因为它会隐藏同名的内置函数(类型)。

石斑鱼食谱很容易使用,但有点难以解释

a 中的项目dict是无序的。因此,如果您希望 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 回答
4

字典是一种无序的数据结构。要保留订单,请使用collection.OrderedDict

>>> lst = ['a',1,'b',2,'c',3,'d',4]
>>> from collections import OrderedDict
>>> OrderedDict(lst[i:i+2] for i in range(0, len(lst),2))
OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
于 2013-08-24T09:50:56.167 回答