关于python:我怎样才能用两个元组来生成字典?

How can I take two tuples to produce a dictionary?

本问题已经有最佳答案,请猛点这里访问。

我的第一个想法是写一个交互程序,或者做一些列表理解。但是,就像我用python编写的每一个5-10行方法一样,通常有人可以将我指向标准库中的一个调用来完成相同的任务。

我怎样才能从两个元组(xy转到字典z

1
2
3
4
5
6
7
8
9
10
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 }


元组是iterable。可以使用zip将两个或多个iterables合并为两个或多个元素的元组。

字典可以用两个元组组成,因此:

1
2
3
#          v values
dict(zip(y,x))
#        ^ keys

这就产生:

1
2
>>> dict(zip(y,x))
{'c': 3, 'a': 1, 'b': 2}

注意,如果两个iterables的长度不同,那么zip将从其中一个tuples用尽时停止。

正如@wondercricket所说,您可以使用EDOCX1(或python-3.x中的EDOCX1(或EDOCX1)(3))和fillvalue:当iterables之一耗尽时使用的值:

1
2
3
from itertools import izip_longest

dict(izip_longest(y,x,fillvalue=''))

因此,如果首先耗尽key iterable,那么剩下的所有值都将映射到空字符串上(因此只存储最后一个值)。如果首先耗尽了iterable值,则此处所有剩余的键都将映射到空字符串上。


您可以使用字典理解:

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