2013-08-24 2 views
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} 

Не могли бы вы помочь, пожалуйста, посоветуйте?

+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 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 little harder to explain.

Элементы в категории dict являются неупорядоченными. Так что если вы хотите детали 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)]) 
Смежные вопросы