如何将两个列表结合到Python中的字典中?

我有两个相同长度的列表:

[1,2,3,4][a,b,c,d]

我想创build一个字典,我有{1:a, 2:b, 3:c, 4:d}

什么是最好的方法来做到这一点?

 dict(zip([1,2,3,4], [a,b,c,d])) 

如果列表很大,你应该使用itertools.izip

如果你有更多的键而不是值,你想要填写额外的键的值,你可以使用itertools.izip_longest

在这里, abcd是variables – 它可以正常工作(只要它们被定义),但是如果你的话,你可能意味着['a','b','c','d']希望他们作为string。

zip从每个迭代中取出第一个元素,并构成一个元组,然后从每个元素中取出第二个元素等。

dict可以采取可迭代迭代,其中每个内部迭代有两个项目 – 它然后使用第一个作为关键和第二个作为每个项目的值。

 >>> dict(zip([1, 2, 3, 4], ['a', 'b', 'c', 'd'])) {1: 'a', 2: 'b', 3: 'c', 4: 'd'} 

如果它们的大小不一样,则zip将截断较长的一个。

 dict(zip([1,2,3,4], ['a', 'b', 'c', 'd'])) 

http://docs.python.org/library/functions.html

如果在第一个列表中有重复的键映射到第二个列表中的不同值(如一对多关系),但是需要将这些值合并或添加或不进行更新,则可以这样做:

 i = iter(["a", "a", "b", "c", "b"]) j = iter([1,2,3,4,5]) k = list(zip(i, j)) for (x,y) in k: if x in d: d[x] = d[x] + y #or whatever your function needs to be to combine them else: d[x] = y 

在这个例子中, d == {'a': 3, 'c': 4, 'b': 8}

我不知道最好的(最简单的?最快的?最可读的?),但是一种方法是:

 dict(zip([1, 2, 3, 4], [a, b, c, d])) 

我发现自己需要创build一个包含三个列表(经度,纬度和值)的字典,下面是这个技巧:

 > lat = [45.3,56.2,23.4,60.4] > lon = [134.6,128.7,111.9,75.8] > val = [3,6,2,5] > dict(zip(zip(lat,lon),val)) {(56.2, 128.7): 6, (60.4, 75.8): 5, (23.4, 111.9): 2, (45.3, 134.6): 3} 

或者类似于上面的例子:

 > list1 = [1,2,3,4] > list2 = [1,2,3,4] > list3 = ['a','b','c','d'] > dict(zip(zip(list1,list2),list3)) {(3, 3): 'c', (4, 4): 'd', (1, 1): 'a', (2, 2): 'b'} 

注:字典是“无序的”,但是如果你想把它看作“sorting”,请参考这个问题,如果你想按键sorting,或者这个问题,如果你想按价值sorting。