2009-08-05 103 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)} 

zip更多信息,請參見documentation

正如下面的lionbest所指出的,如果您的輸入數據很大,您可能需要查看itertools.izip()izipzip的功能基本相同,但是它創建迭代器而不是列表。這樣,您在創建字典之前不會創建大型臨時列表。

+5

如果a,b,c會很大,我推薦從itertools模塊中使用izip。 – Arpegius 2009-08-05 13:01:48

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,它將在集合模塊中包含一個有序的字典實現。