Не могу конвертировать Tuple of Tuple в словарь - PullRequest
0 голосов
/ 11 декабря 2018

Я пытался преобразовать кортеж кортежа в словарь, но это не дает мне правильное значение.

t = ((1,1),(1,10),(1,100),(1,1000),(2,2),(2,20),(2,200),(2,2000),(3,3), 
    (3,30),(3,300),(3,3000),(4,4),(4,40),(4,400),(4,4000))
d = dict(t)

, делая это, я получаю значение

d = {1:1000,2:2000,3:3000,4:4000}

где, как будто я пытаюсь поменять значения пары ключ-значение, он выдает все значения, как

d = dict((x,y) for y,x in t)
d = {1:1,10:1,100:1,1000:1,2:2,20:2,200:2,2000:2,} etc

, что я хочу, это

 d = {1:1,1:10,1:100,1:1000,2:2,2:20,2:200,2:2000...... 4:4000}

1 Ответ

0 голосов
/ 11 декабря 2018

Словари Python не поддерживают дубликаты ключей.

Вместо этого вы можете сопоставить несколько значений (список) с одним и тем же ключом с помощью collections.defaultdict():

from collections import defaultdict

t = ((1,1),(1,10),(1,100),(1,1000),(2,2),(2,20),(2,200),(2,2000),(3,3), 
     (3,30),(3,300),(3,3000),(4,4),(4,40),(4,400),(4,4000))

d = defaultdict(list)
for x, y in t:
    d[x].append(y)

print(d)

, что дает следующий словарь:

defaultdict(<class 'list'>, {1: [1, 10, 100, 1000], 2: [2, 20, 200, 2000], 3: [3, 30, 300, 3000], 4: [4, 40, 400, 4000]})

Примечание: defaultdict() - это просто подкласс встроенного класса dict, поэтому вы можете обращаться с ним так же, как с обычным словарем.

Если вы предпочитаете не использовать библиотеки, dict.setdefault() также является опцией:

t = ((1,1),(1,10),(1,100),(1,1000),(2,2),(2,20),(2,200),(2,2000),(3,3), 
     (3,30),(3,300),(3,3000),(4,4),(4,40),(4,400),(4,4000))

d = {}
for x, y in t:
    d.setdefault(x, []).append(y)

print(d)
# {1: [1, 10, 100, 1000], 2: [2, 20, 200, 2000], 3: [3, 30, 300, 3000], 4: [4, 40, 400, 4000]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...