如何制作两个元组来制作字典?

Jam*_*mie 14 python dictionary tuples

我的第一个想法是写一个interator,或者做一些列表理解.但是,就像我在python中编写的每个5-10行方法一样,有人通常可以指示我在标准库中调用来完成相同的操作.

我如何从两个元组xy一个字典z

x = ( 1, 2, 3 )
y = ( 'a', 'b', 'c')

z = { }
for index, value in enumerate(y):
    z[value] = x[index]

print z

# { 'a':1, 'b':2, 'c':3 }
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 27

元组是迭代的.您可以使用zip将两个或更多个iterables合并为两个或更多元素的元组.

可以使用2元组的可迭代构造字典,因此:

#          v values
dict(zip(y,x))
#        ^ keys
Run Code Online (Sandbox Code Playgroud)

这会产生:

>>> dict(zip(y,x))
{'c': 3, 'a': 1, 'b': 2}
Run Code Online (Sandbox Code Playgroud)

请注意,如果两个iterables具有不同的长度,那么zip将从其中一个元组耗尽的那一刻起停止.

您可以 - 正如@Wondercricket所说的那样 - 使用izip_longest(或zip_longest)使用fillvalue:当其中一个iterables耗尽时使用的值:

from itertools import izip_longest

dict(izip_longest(y,x,fillvalue=''))
Run Code Online (Sandbox Code Playgroud)

因此,如果密钥迭代首先耗尽,那么所有剩余的值将映射到空字符串(因此只存储最后一个).如果值iterable首先耗尽,则所有剩余的键将在此处映射到空字符串.

  • @WillemVanOnsem注意:`izip_longest`现在只是Python 3中的`zip_longest`. (3认同)

Emi*_*har 5

您可以使用字典理解:

>>> {y[i]:x[i] for i,_ in enumerate(x)}
{'a': 1, 'b': 2, 'c': 3}
Run Code Online (Sandbox Code Playgroud)