如何在Python中合并具有相同键和值的字典

时间:2020-09-29 16:05:26

标签: python

我有一个列表,该列表应与相同的键“ client”合并,并在键“ statuses”中使用相同的日期键合并具有相同值的那些。

items = [{'client': 'AAA', 'jobname': '1_Daily', 'statuses': {'09092020': 'Success', '09082020': 'Success', '09072020': 'Success', '09062020': 'Success', '09052020': 'Success', '09042020': 'Success', '09032020': 'Success'}}
{'client': 'AAA', 'jobname': '2_Daily', 'statuses': {'09092020': 'Success', '09082020': 'Failed', '09072020': 'Success', '09062020': 'Success', '09052020': 'Success', '09042020': 'Success', '09032020': 'Success'}}
{'client': 'BBB', 'jobname': 'Exchange_1', 'statuses': {'09092020': 'Success', '09082020': 'Success', '09072020': 'Success', '09062020': 'Success', '09052020': 'Success', '09042020': 'Success', '09032020': 'Success'}}
{'client': 'BBB', 'jobname': 'Exchange_2', 'statuses': {'09092020': 'Success', '09082020': 'Success', '09072020': 'Success', '09062020': 'Success', '09052020': 'Success', '09042020': 'Success', '09032020': 'Success'}}
{'client': 'CCC', 'jobname': 'Daily_1', 'statuses': {'09092020': 'Success', '09082020': 'Success', '09072020': 'Success', '09062020': 'Success', '09052020': 'Success', '09042020': 'Success', '09032020': 'Success'}}
{'client': 'CCC', 'jobname': 'Daily_2', 'statuses': {'09092020': 'Success', '09082020': 'Running', '09072020': 'Success', '09062020': 'Running', '09052020': 'Success', '09042020': 'Success', '09032020': 'Running'}}]

我需要到达这样的地方

jobs = {
'AAA': {'09092020': ['Success', 'Success'], '09082020': ['Success', 'Failed'], '09072020': ['Success', 'Success'], '09072020': ['Success', 'Success'], '09062020': ['Success', 'Success'], '09052020': ['Success', 'Success'], '09042020': ['Success', 'Success'], '09032020': ['Success', 'Success']},
'BBB': {'09092020': ['Success', 'Success'], '09082020': ['Success', 'Success'], '09072020': ['Success', 'Success'], '09072020': ['Success', 'Success'], '09062020': ['Success', 'Success'], '09052020': ['Success', 'Success'], '09042020': ['Success', 'Success'], '09032020': ['Success', 'Success']},
'CCC': {'09092020': ['Success', 'Success'], '09082020': ['Success', 'Running'], '09072020': ['Success', 'Success'], '09072020': ['Success', 'Success'], '09062020': ['Success', 'Running'], '09052020': ['Success', 'Success'], '09042020': ['Success', 'Success'], '09032020': ['Success', 'Running']}
}

这是我的代码

from collections import defaultdict

jobs = {}
dd = defaultdict(list)
for item in items:
    for k, v in item.items():
        if k == "statuses":
            for key, val in v.items():
                dd[key].append(val)
            jobs[item['client']] = dd

1 个答案:

答案 0 :(得分:1)

在这里使用嵌套的defaultdict对多个级别的键进行分组会容易得多:

from collections import defaultdict
from pprint import pprint

jobs = defaultdict(lambda: defaultdict(list))

for item in items:
    for code, status in item["statuses"].items():
        jobs[item["client"]][code].append(status)

pprint(jobs)

输出:

defaultdict(<function <lambda> at 0x000002349BD051F0>,
            {'AAA': defaultdict(<class 'list'>,
                                {'09032020': ['Success', 'Success'],
                                 '09042020': ['Success', 'Success'],
                                 '09052020': ['Success', 'Success'],
                                 '09062020': ['Success', 'Success'],
                                 '09072020': ['Success', 'Success'],
                                 '09082020': ['Success', 'Failed'],
                                 '09092020': ['Success', 'Success']}),
             'BBB': defaultdict(<class 'list'>,
                                {'09032020': ['Success', 'Success'],
                                 '09042020': ['Success', 'Success'],
                                 '09052020': ['Success', 'Success'],
                                 '09062020': ['Success', 'Success'],
                                 '09072020': ['Success', 'Success'],
                                 '09082020': ['Success', 'Success'],
                                 '09092020': ['Success', 'Success']}),
             'CCC': defaultdict(<class 'list'>,
                                {'09032020': ['Success', 'Running'],
                                 '09042020': ['Success', 'Success'],
                                 '09052020': ['Success', 'Success'],
                                 '09062020': ['Success', 'Running'],
                                 '09072020': ['Success', 'Success'],
                                 '09082020': ['Success', 'Running'],
                                 '09092020': ['Success', 'Success']})})
相关问题