2009-08-05 100 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,它将在集合模块中包含一个有序的字典实现。