Обновите словарь и добавьте, если ключ существует - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть список словарей.

list_of_dicts = [{ a: 1, b:f, c:3}, {a: y, b:q, c:z, d: 1}, ... ] 

Теперь я хочу создать новый словарь, который будет выглядеть так:

newDict = { a: [1,y], b: [f,q], c: [3,z], d:[1]}

Я знаю, что мог бы сделать двойнойцикл for, но это довольно медленно, так как я имею дело с большими объектами (в основном массивами NumPy) в словарях.

newDict = {}
for l in list_of_dicts: 
    for k, v in l.items():
        if k in newDict: 
           newDict.append(v)
        else:
           newDict[k] = [v]

Как сделать это быстрее?

Ответы [ 2 ]

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

Использование collections.defaultdict() улучшит производительность:

result = defaultdict(list)
for d in list_of_dicts:
    for k, v in d.items():
        result[k].append(v)
0 голосов
/ 14 декабря 2018

Это самый быстрый способ сделать это.Вы можете заменить if на newdict.setdefault(k, []).append(v), чтобы упростить его, но вы ничего не сможете сделать, это будет быстрее, чем два цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...