我的第一反应是编写一个迭代器,或者使用列表推导式。但是,就像我在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 }
我的第一反应是编写一个迭代器,或者使用列表推导式。但是,就像我在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 }
# v values
dict(zip(y,x))
# ^ keys
这将生成:
>>> dict(zip(y,x))
{'c': 3, 'a': 1, 'b': 2}
zip
将在一个元组耗尽时停止。您可以像@Wondercricket所说的那样,使用izip_longest
(或在python-3.x中使用zip_longest
)和fillvalue
,它是在可迭代对象之一用尽时使用的值。<b>from itertools import izip_longest</b>
dict(<b>izip_longest(</b>y,x<b>,fillvalue='')</b>)
>>> {y[i]:x[i] for i,_ in enumerate(x)}
{'a': 1, 'b': 2, 'c': 3}
x
比 y
更长,那么会发生什么?准确地说,会出现 IndexError
。 - Mast
dict(zip(y, x))
而不是dict(zip(x,y))
。 - Christian Dean