如何将两个列表结合到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
。
在这里, a
, b
, c
和d
是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']))
如果在第一个列表中有重复的键映射到第二个列表中的不同值(如一对多关系),但是需要将这些值合并或添加或不进行更新,则可以这样做:
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。