我想在 Python 中合并 2 个数组并根据键添加值
示例:
Groceries = []
A = [{group: 'Fruit',
item: 'Banana',
quantity: 10},
{group: 'Vegetable',
item: 'Carrot',
quantity: 1}]
for item in A:
Groceries.append(item)
B = [{group: 'Fruit',
item: 'Banana',
quantity: 3},
{group: 'Vegetable',
item: 'Celery',
quantity: 1}]
for item in B:
Groceries.append(item)
打印(杂货)将返回:
[{group: 'Fruit',
item: 'Banana',
quantity: 10},
{group: 'Vegetable',
item: 'Carrot',
quantity: 1},
{group: 'Fruit',
item: 'Banana',
quantity: 3},
{group: 'Vegetable',
item: 'Celery',
quantity: 1}]
有什么方法可以将它们合并起来,结果是:
[{group: 'Fruit',
item: 'Banana',
quantity: 13},
{group: 'Vegetable',
item: 'Carrot',
quantity: 1},
{group: 'Vegetable',
item: 'Celery',
quantity: 1}]
(请注意,它指出了 13 个香蕉,而不是 2 个香蕉)
最佳答案
要计算作业数量,请使用 Counter
:
from collections import Counter
c = Counter()
计数器需要正确的键来区分项目,因此将原始字典格式的 (group, item)
元组作为键,数量作为值:
c.update({(d["group"], d["item"]): d["quantity"] for d in A})
c.update({(d["group"], d["item"]): d["quantity"] for d in B})
此方法有一个警告:如果您的列表 A 或 B 包含同一项目的多个记录,则此方法将无法正常工作,因为字典理解将仅“记住”最新的记录。如果您知道这是可能的,您可以恢复到普通的旧式 for 循环和相加:
from operator import itemgetter
from itertools import chain
keymaster = itemgetter("group", "item")
for d in chain(A, B):
c[keymaster(d)] += d["quantity"]
要恢复原始格式,请根据计数器的项目创建一个小词典列表:
[{"group": k[0], "item": k[1], "quantity": v} for k, v in c.items()]
# results
[{'item': 'Carrot', 'group': 'Vegetable', 'quantity': 1},
{'item': 'Celery', 'group': 'Vegetable', 'quantity': 1},
{'item': 'Banana', 'group': 'Fruit', 'quantity': 13}]
关于python - 合并数组并根据python中的键添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36638946/