Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用两个元组生成词典?_Python_Dictionary_Tuples_Python 3.x - Fatal编程技术网

Python 如何使用两个元组生成词典?

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 } 元组是

我的第一个想法是写一个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 }
元组是可分解的。您可以使用
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意味着制作字典”这一成语,我想它同样可读。)