Словарь с несколькими значениями для кортежа - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть словарь с несколькими значениями:

dict_a = {1: {'a':1, 'b':2, 'c':3},  2:{'a': 4, 'b':5, c:'6'}}

.
Я хочу результат как таковой:

[('a',(1,4)),('b',(2,5)), ('c',(3,6))]  

Я написал код:

for keys, values in dict_a:  
    for k, v in values:  
        print(v)  

Но результат приходит как ('a',1),('b',2) .... Я немного застрял здесь. Может кто-нибудь помочь мне в этом, пожалуйста!

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

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

dict_a = {1: {'a':1, 'b':2, 'c':3}, 2: {'a':4, 'b':5, 'c':6}}

res = [(k, tuple(d[k] for d in dict_a.values())) for k in dict_a[1]]

[('a', (1, 4)), ('b', (2, 5)), ('c', (3, 6))]

Предполагает:

  1. dict_a упорядочивается по внешнему ключу, который может быть автоматическим в Python 3.6+. В противном случае используйте collections.OrderedDict.
  2. Ключи в каждом словаре значения dict_a одинаковы.
0 голосов
/ 09 сентября 2018

Использование collections.defaultdict:

Настройка

from collections import defaultdict    
dct = defaultdict(tuple)

for _, v in dict_a.items():
    for el in v:
        dct[el] += (v[el],)

print(list(dct.items())

[('a', (1, 4)), ('b', (2, 5)), ('c', (3, '6'))]
...