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

Sup*_*ing 77 python dictionary list

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

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

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

最好的方法是什么?

agf*_*agf 133

dict(zip([1,2,3,4], [a,b,c,d]))
Run Code Online (Sandbox Code Playgroud)

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

如果您有多个键而不是值,并且您想要填写额外键的值,则可以使用itertools.izip_longest.

这里a,b,c,和d是变量-它会正常工作(只要它们被定义),但你可能是指['a','b','c','d'],如果你希望他们为字符串.

zip 从每个iterable中获取第一个项目并生成一个元组,然后从每个迭代中获取第二个项目,等等.

dict 可以采用迭代的迭代,其中每个内部迭代有两个项 - 然后使用第一个作为键,第二个作为每个项的值.

  • +1用于指出OP可能存在的变量名称/字符串错误. (7认同)
  • 感谢您将我指向 `izip_longest`,我正是需要这个。 (2认同)
  • 在Python3中删除了izip(),只需使用zip() (2认同)

Jos*_*Lee 13

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

如果它们的大小不同,zip则会截断较长的一个.


Dan*_*yla 6

如果第一个列表中有重复的键映射到第二个列表中的不同值,如一对多关系,但您需要组合或添加值或其他内容而不是更新,您可以这样做:

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
Run Code Online (Sandbox Code Playgroud)

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


Rem*_*ank 5

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

dict(zip([1, 2, 3, 4], [a, b, c, d]))
Run Code Online (Sandbox Code Playgroud)