我的第一个想法是写一个交互者,或者做一些列表理解。但是,就像我在python中编写的每个5-10行方法一样,有人通常可以指向标准库中的调用来完成相同的操作。
如何从两个元组x
和y
转到字典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 }
答案 0 :(得分:26)
元组是 iterables 。您可以使用zip
将两个或更多个iterables合并为两个或更多元素的元组。
字典可以用2元组的可迭代构造,所以:
# v values
dict(zip(y,x))
# ^ keys
这会产生:
>>> dict(zip(y,x))
{'c': 3, 'a': 1, 'b': 2}
请注意,如果两个iterables的长度,那么zip
将从其中一个元组耗尽时停止。
您可以 - @Wondercricket说 - 使用 fillvalue
izip_longest
(或zip_longest
中的python-3.x):a当其中一个iterables耗尽时使用的值:
from itertools import izip_longest
dict(izip_longest(y,x,fillvalue=''))
因此,如果密钥迭代首先耗尽,那么所有剩余的值将映射到空字符串(因此只存储最后一个)。如果值iterable首先耗尽,那么所有剩余的键将在空字符串上映射。
答案 1 :(得分:5)
您可以使用词典理解:
>>> {y[i]:x[i] for i,_ in enumerate(x)}
{'a': 1, 'b': 2, 'c': 3}