Подтвердить что ты не робот

Как преобразовать список словарей в словарь списков в Python?

Это может быть классический вопрос в Python, но я еще не нашел ответа.

У меня есть список словарей, эти словари имеют похожие ключи. Это выглядит так:

 [{0: myech.MatchingResponse at 0x10d6f7fd0, 
   3: myech.MatchingResponse at 0x10d9886d0,
   6: myech.MatchingResponse at 0x10d6f7d90,
   9: myech.MatchingResponse at 0x10d988ad0},
  {0: myech.MatchingResponse at 0x10d6f7b10,
   3: myech.MatchingResponse at 0x10d6f7f90>}]

Я хотел бы получить новый словарь с [0,3,6,9] в качестве ключей и списки "myech.MatchingResponse" в качестве значений.

Конечно, я могу сделать это, используя простой цикл, но мне было интересно, есть ли более эффективное решение.

4b9b3361

Ответ 1

import collections

result = collections.defaultdict(list)

for d in dictionaries:
    for k, v in d.items():
        result[k].append(v)

Ответ 2

скажем, что ваш список назначен переменной, называемой mylist.

mydic = {}
for dic in mylist:
    for key, value in dic.items():
        if key in mydic:
            mydic[key].append(value)
        else:
            mydic[key] = [value]

Ответ 3

Возможно сделать это и с пониманием dict... может быть одна строка, но я сохранил ее как две строки для ясности.:)

from itertools import chain

all_keys = set(chain(*[x.keys() for x in dd]))
print {k : [d[k] for d in dd if k in d] for k in all_keys}

Результаты в:

{0: ['a', 'x'], 9: ['d'], 3: ['b', 'y'], 6: ['c']}

Ответ 4

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

d = []
d.append({'a':1,'b':2})
d.append({'a':4,'b':3}) 
print(d)                                                               
[{'a': 1, 'b': 2}, {'a': 4, 'b': 3}]

newdict = {}
for k,v in d[0].items():
    newdict[k] = [x[k] for x in d]

print(newdict)
{'a': [1, 4], 'b': [2, 3]}