Объединить список словарей с одинаковым ключом - PullRequest
1 голос
/ 10 июля 2019

У меня есть список словарей, где я должен объединить значения с одним и тем же ключом.Я пытался, но не получил ожидаемый формат.Может кто-нибудь сказать мне, как это сделать?

 dict_list=[{'fl_metric': ('randomforest', 0.8), 'accuracy': ('randomforest', 0.9)}, {'fl_metric': ('sgdclassifier', 0.4), 'accuracy': ('sgdclassifier', 0.5)}]

Вывод должен быть:

d = {'accuracy': [('randomforest', 0.4), ('sgdclassifier', 0.5)],
 'f1_metric': [('randomforest', 0.8), ('sgdclassifier', 0.9)]}

1 Ответ

1 голос
/ 10 июля 2019

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

Ex:

from collections import defaultdict

dict_list=[{'fl_metric': ('randomforest', 0.8), 'accuracy': ('randomforest', 0.9)}, {'fl_metric': ('sgdclassifier', 0.4), 'accuracy': ('sgdclassifier', 0.5)}]
result = defaultdict(list)

for i in dict_list:
    for k, v in i.items():
        result[k].append(v)
print(result)

# --> defaultdict(<type 'list'>, {'fl_metric': [('randomforest', 0.8), ('sgdclassifier', 0.4)], 'accuracy': [('randomforest', 0.9), ('sgdclassifier', 0.5)]})

или используя setdefault

Ex:

result = {}
for i in dict_list:
    for k, v in i.items():
        result.setdefault(k, []).append(v)
print(result)

# --> {'fl_metric': [('randomforest', 0.8), ('sgdclassifier', 0.4)], 'accuracy': [('randomforest', 0.9), ('sgdclassifier', 0.5)]}

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