Как я могу взять два кортежа для создания словаря?

Моя первая мысль состоит в том, чтобы написать интератора или, возможно, сделать некоторое понимание списка. Но, как и каждый метод 5-10 строк, который я пишу на python, кто-то обычно может указать мне на вызов в стандартной библиотеке, чтобы выполнить то же самое.

Как я могу перейти из двух кортежей, 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 }

Ответ 1

Кортежи являются итерабельными. Вы можете использовать zip для объединения двух или более итераций в кортежи из двух или более элементов.

Словарь может быть построен из итерабельного из 2-х кортежей, поэтому:

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

Это генерирует:

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

Обратите внимание, что если два итерабеля имеют разную длину, то zip остановится с момента исчерпания одного из кортежей.

Вы можете - как @Wondercricket - использовать izip_longest (или zip_longest в ) с fillvalue: значение, которое используется, когда один из итераций исчерпан:

from itertools import izip_longest

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

Итак, если ключевой итерируемый сначала исчерпается, все оставшиеся значения будут отображаться здесь на пустой строке (так что будет сохранен только последний). Если значение iterable исчерпано первым, все остальные ключи будут отображаться в пустой строке.

Ответ 2

Вы можете использовать понимание словаря:

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