gpt4 book ai didi

python - 根据python中的键聚合字典列表中的值

转载 作者:行者123 更新时间:2023-11-28 21:40:13 26 4
gpt4 key购买 nike

我正在尝试获取 2 个不同列表的聚合,其中每个元素都是一个包含 2 个条目、月份和值的字典。

所以第一个列表看起来像这样:

[{
'patient_notes': 5,
'month': datetime.date(2017, 1, 1)
}, {
'patient_notes': 5,
'month': datetime.date(2017, 2, 1)
}, {
'patient_notes': 5,
'month': datetime.date(2017, 5, 1)
}, {
'patient_notes': 5,
'month': datetime.date(2017, 7, 1)
}, {
'patient_notes': 5,
'month': datetime.date(2017, 8, 1)
}, {
'patient_notes': 5,
'month': datetime.date(2017, 12, 1)
}]

第二个列表是:

[{
'employee_notes': 4,
'month': datetime.date(2017, 2, 1)
}, {
'employee_notes': 4,
'month': datetime.date(2017, 3, 1)
}, {
'employee_notes': 4,
'month': datetime.date(2017, 4, 1)
}, {
'employee_notes': 4,
'month': datetime.date(2017, 8, 1)
}, {
'employee_notes': 4,
'month': datetime.date(2017, 9, 1)
}, {
'employee_notes': 4,
'month': datetime.date(2017, 10, 1)
}, {
'employee_notes': 4,
'month': datetime.date(2017, 12, 1)
}]

所以我需要构建一个新列表,其中包含每月两个列表的总和,如下所示:

[{
'total_messages': 14,
'month': '2017-01-01'
}, {
'total_messages': 14,
'month': '2017-02-01'
}, {
'total_messages': 14,
'month': '2017-03-01'
}, {
'total_messages': 14,
'month': '2017-04-01'
}, {
'total_messages': 14,
'month': '2017-05-01'
}, {
'total_messages': 14,
'month': '2017-06-01'
}, {
'total_messages': 14,
'month': '2017-07-01'
}, {
'total_messages': 14,
'month': '2017-08-01'
}, {
'total_messages': 14,
'month': '2017-09-01'
}, {
'total_messages': 14,
'month': '2017-10-01'
}, {
'total_messages': 14,
'month': '2017-11-01'
}, {
'total_messages': 14,
'month': '2017-12-01'
}]

我首先尝试使用 zip,但这只有在前 2 个列表大小相等的情况下才有效。然后我尝试使用 [itertools.izip_longest] 但如果列表大小相同但月份不同,这就会出现问题......我不能简单地聚合那些......我只需要聚合匹配的月份

Counter 也很适合这个,但我不能更改原始列表的键名...有什么想法吗?

最佳答案

您可以使用defaultdict 创建一个计数器。遍历第一个列表中的每个项目并将 patient_notes 值添加到字典中。然后浏览第二个列表并添加 employee_notes 值。

现在您需要将新的 defaultdict 编码回所需格式的列表中。您可以为此使用列表理解。我按月对列表进行了排序。

from collections import defaultdict

dd = defaultdict(int)

for d in my_list_1:
dd[d['month']] += d['patient_notes']
for d in my_list_2:
dd[d['month']] += d['employee_notes']

result = [{'total_messages': dd[k], 'month': k} for k in sorted(dd.keys())]
>>> result
[{'month': datetime.date(2017, 1, 1), 'total_messages': 5},
{'month': datetime.date(2017, 2, 1), 'total_messages': 9},
{'month': datetime.date(2017, 3, 1), 'total_messages': 4},
{'month': datetime.date(2017, 4, 1), 'total_messages': 4},
{'month': datetime.date(2017, 5, 1), 'total_messages': 5},
{'month': datetime.date(2017, 7, 1), 'total_messages': 5},
{'month': datetime.date(2017, 8, 1), 'total_messages': 9},
{'month': datetime.date(2017, 9, 1), 'total_messages': 4},
{'month': datetime.date(2017, 10, 1), 'total_messages': 4},
{'month': datetime.date(2017, 12, 1), 'total_messages': 9}]

关于python - 根据python中的键聚合字典列表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45828229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com