2013-08-27 2 views

ответ

4

Вы можете попробовать что-то вроде этого:

>>> l = ['AAA', 'K', 'AAC', 'N', 'AAG', 'K'] 
>>> 
>>> v = iter(l) 
>>> {s: next(v) for s in v} 
{'AAG': 'K', 'AAA': 'K', 'AAC': 'N'} 

Вот небольшое сравнение времени в Python 3.3.2:

>>> from timeit import timeit 
>>> setup = "l = ['AAA', 'K', 'AAC', 'N', 'AAG', 'K']" 
>>> 
>>> timeit("v = iter(l); {s: next(v) for s in v}", setup) 
0.7127587589984614 
>>> 
>>> timeit("dict(zip(l[::2],l[1::2]))", setup) 
1.4540460520001943 
>>> 
>>> timeit("dict(zip(*[iter(l)]*2))", setup) 
1.395266197001547 
>>> 
>>> timeit("{k: l[i+1] for i,k in enumerate(l) if not i%2}", setup) 
1.4753028479990462 

Ссылка:

+0

... или 'dict ((s, next (v)) для s в v)' для более старых версий. – glglgl

4

Шаг через поиск по двоек, застежка-молния результаты вместе, давая список кортежей, которые будут ваши пары ключ/значение, а затем преобразовать этот список кортежей в словаре:

>>> dict(zip(l[::2],l[1::2])) 
{'AAG': 'K', 'AAA': 'K', 'AAC': 'N'} 
0

Я думаю, что самый короткий путь заключается в использовании ломтиков:

>>> listedd = ['AAA', 'K', 'AAC', 'N', 'AAG', 'K',] 
>>> result = dict(zip(listedd[::2], listedd[1::2])) 
{'AAA': 'K', 'AAC': 'N', 'AAG': 'K'} 

Этот код действительно отображает все четные элементы списка в нечетные элементы.

Обновление: Я пропустил предыдущий пост, извините))

1

Просто некоторые вкус:

d = { k : listedd[i+1] for i, k in enumerate(listedd) if not i % 2} 
0

Другой способ использования iter и zip:

dict(zip(*[iter(listedd)]*2)) 

Или, если вы предпочитают более длинные программы для более коротких:

>>> listedd = ['AAA', 'K', 'AAC', 'N', 'AAG', 'K',] 
>>> it = iter(listedd) 
>>> z = zip(it,it) 
>>> d = dict(z) 
>>> print d 
{'AAG': 'K', 'AAA': 'K', 'AAC': 'N'} 
Смежные вопросы