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

此博客介绍了如何使用Python和defaultdict将一个包含不同client和jobname的列表,根据'client'键和'statuses'中的日期进行合并,最终形成按日期和client分组的字典结构。作者提供了详细的代码示例和输出结果。
摘要由CSDN通过智能技术生成

我有一个列表,应该与相同的键“ 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

解决方案

在这里使用嵌套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( at 0x000002349BD051F0>,

{'AAA': defaultdict(,

{'09032020': ['Success', 'Success'],

'09042020': ['Success', 'Success'],

'09052020': ['Success', 'Success'],

'09062020': ['Success', 'Success'],

'09072020': ['Success', 'Success'],

'09082020': ['Success', 'Failed'],

'09092020': ['Success', 'Success']}),

'BBB': defaultdict(,

{'09032020': ['Success', 'Success'],

'09042020': ['Success', 'Success'],

'09052020': ['Success', 'Success'],

'09062020': ['Success', 'Success'],

'09072020': ['Success', 'Success'],

'09082020': ['Success', 'Success'],

'09092020': ['Success', 'Success']}),

'CCC': defaultdict(,

{'09032020': ['Success', 'Running'],

'09042020': ['Success', 'Success'],

'09052020': ['Success', 'Success'],

'09062020': ['Success', 'Running'],

'09072020': ['Success', 'Success'],

'09082020': ['Success', 'Running'],

'09092020': ['Success', 'Success']})})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值