2009-08-05 4 views
6

У меня есть три списка, первый - список имен, второй - список словарей, а третий - список данных. Каждая позиция в списке соответствует тем же позициям в других списках. List_1 [0] имеет соответствующие данные в List_2 [0] и List_3 [0] и т. Д. Я хотел бы превратить эти три списка в словарь внутри словаря, причем значения в List_1 являются первичными ключами. Как мне это сделать, сохраняя все в порядке?Соединительные словари

ответ

13
>>> a = [1,2,3] 
>>> b = [4,5,6] 
>>> c = [7,8,9] 
>>> dict(zip(a, zip(b, c))) 
{1: (4, 7), 2: (5, 8), 3: (6, 9)} 

Смотрите documentation для получения дополнительной информации о zip.

Как показано на рисунке ниже, вы можете взглянуть на itertools.izip(), если ваши входные данные большие. izip делает в основном то же самое, что и zip, но он создает итераторы вместо списков. Таким образом, вы не создаете большие временные списки перед созданием словаря.

+5

Если a, b, c будет огромным, я рекомендую izip из модуля itertools. – Arpegius

+0

@ lionbest: Хорошо, я добавил это. – balpha

1

Python 3:

combined = {name:dict(data1=List_2[i], data2=List_3[i]) for i, name in enumerate(List_1)} 

Python 2.5:

combined = {} 
for i, name in enumerate(List_1): 
    combined[name] = dict(data1=List_2[i], data2=List_3[i]) 
0

если порядок этих вещей вопросов, вы не должны использовать словарь. по определению, они неупорядочены. вы можете использовать один из many ordered_dictionary implementations, плавающий вокруг, или дождаться python 2.7 или 3.1, который будет включать упорядоченную реализацию словаря в модуле коллекций.