Создание словаря из кортежа с циклом for - PullRequest
0 голосов
/ 08 марта 2020

У меня есть следующий кортеж tup и я хочу преобразовать его в словарь. Я нашел код, который, кажется, работает. Но когда я пытаюсь сделать что-то для l oop, я получаю сообщение об ошибке. Может кто-нибудь объяснить мне, почему dict(y,x) допускается в первом отпечатке, а другой дает исключение?

tup = ((2,'x'),(3,'a'))

#CORRECT CODE
print(dict((y, x) for x, y in tup))                 #output: {'x':2, 'a':3}

#my own for loop, that throws the type error
for x, y in tup:
    print(dict(y,x))                                #output: TypeError dict expected at most 
                                                    #        1 argument, got 2

Где разница между этими двумя циклами?

Ответы [ 2 ]

2 голосов
/ 08 марта 2020

Правильный код эквивалентен:

output = {}
tup = ((2,'x'),(3,'a'))

for x, y in tup:
    output[y] = x

Что также эквивалентно:

tup = ((2,'x'),(3,'a'))
output = {y:x for (x,y) in tup}

Добавляет пару ключ-значение для каждого элемента кортежа к новому словарь.

0 голосов
/ 08 марта 2020

(просто для знания) другой метод, который вы можете использовать

my_dict={}
for a, b in tup: 
    my_dict.setdefault(a,b) 

Здесь мы использовали метод словаря setdefault (), чтобы преобразовать первый параметр в ключ, а второй - в значение словаря

...