Python 如何使用两个元组生成词典?
我的第一个想法是写一个interator,或者做一些列表理解。但是,就像我用python编写的每一个5-10行方法一样,通常有人可以向我指出标准库中的一个调用来完成同样的任务 如何从两个元组,Python 如何使用两个元组生成词典?,python,dictionary,tuples,python-3.x,Python,Dictionary,Tuples,Python 3.x,我的第一个想法是写一个interator,或者做一些列表理解。但是,就像我用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 } 元组是
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 }
元组是可分解的。您可以使用zip
将两个或多个iterable合并为两个或多个元素的元组
字典可以由2元组的iterable构成,因此:
# v values
dict(zip(y,x))
# ^ keys
这将产生:
>>> dict(zip(y,x))
{'c': 3, 'a': 1, 'b': 2}
请注意,如果两个元组的长度不同,则zip
将从其中一个元组用尽时停止
正如所说,您可以将(或in)与fillvalue
一起使用:当其中一个iterables用尽时使用的值:
from itertools import izip_longest
dict(izip_longest(y,x,fillvalue=''))
从itertools导入izip_
dict(izip_最长(y,x,fillvalue='')
因此,如果首先耗尽键iterable,则所有剩余值都将映射到此处的空字符串上(因此仅存储最后一个值)。如果首先耗尽了值iterable,所有剩余的键将映射到空字符串上。您可以使用字典理解:
>>> {y[i]:x[i] for i,_ in enumerate(x)}
{'a': 1, 'b': 2, 'c': 3}
你把它倒过来了。它应该是
dict(zip(y,x))
而不是dict(zip(x,y))
@ChristianDean:谢谢你的评论。Modified.zip将在其中一个元组用尽时停止。如果OP愿意,可以在答案中添加@Wondercricket:@WillemVanOnsem注意:izip_longest
现在在Python 3中只是zip_longest
。如果x
比y
长,这会怎么样?确切地说,IndexError
。如果您希望x和y的长度相同,zip方法也不会给出您想要的结果(它会默默地产生意外的结果,而不是错误)。在我看来,这种方法要简单得多,不管怎样,您都可能需要显式地处理不同长度的键/值列表(不过,一旦您知道“zip意味着制作字典”这一成语,我想它同样可读。)