2013-08-24 78 views
0

我想创建一个字典从列表创建字典从列表 - 按顺序

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

我使用的字典(),以从列表 字典,而是预期的结果是没有先后顺序。

>>> 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} 

你们可以请帮忙指教吗?

+1

词典中的键没有排序。你为什么期待这个订单?因为它与列表中的一样,或者因为它是词法分析?也许你不需要字典。你能添加更多关于你将如何使用“d”的信息吗? – jimifiki

回答

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)]) 
4

您可以使用grouper recipezip(*[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 little harder to explain

dict中的项目无序。所以,如果你想在某一顺序字典项目,使用collections.OrderedDict(如falsetru已经指出):

In [13]: collections.OrderedDict(zip(*[items]*2)) 
Out[13]: OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)]) 
+0

我只会注意到'items = iter(items)'可能会导致细微的问题,如果'items'预计将被用作列表...... –

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)])