gpt4 book ai didi

python - 如何减少/聚合 Python 中每个键的字典列表?

转载 作者:太空宇宙 更新时间:2023-11-03 12:48:07 25 4
gpt4 key购买 nike

我有一个这样的字典列表:

sales_per_store_per_day = [
{'date':'2014-06-01', 'store':'a', 'product1':10, 'product2':3, 'product3':15},
{'date':'2014-06-01', 'store':'b', 'product1':20, 'product2':4, 'product3':16},
{'date':'2014-06-02', 'store':'a', 'product1':30, 'product2':5, 'product3':17},
{'date':'2014-06-02', 'store':'b', 'product1':40, 'product2':6, 'product3':18},
]

我如何减少此列表以包含每个商店的产品总和,而忽略日期?上述输入的结果将是:

sales_per_store = [
{'store':'a', 'product1':40, 'product2':8, 'product3':32},
{'store':'b', 'product1':60, 'product2':10, 'product3':34}
]

最佳答案

使用 collections.defaultdict() 跟踪每个商店的信息,以及 collections.Counter() 简化数字求和:

from collections import defaultdict, Counter

by_store = defaultdict(Counter)

for info in sales_per_store_per_day:
counts = Counter({k: v for k, v in info.items() if k not in ('store', 'date')})
by_store[info['store']] += counts

sales_per_store = [dict(v, store=k) for k, v in by_store.items()]

countsCounter()info 中的每个产品构建的实例字典;我假设除了 store 之外的所有内容和 date键是产品计数。它使用字典理解来生成删除了这两个键的副本。 by_store[info['store']]查找给定商店的当前总计数(默认为新的空 Counter() 对象)。

然后最后一行生成您想要的输出;新词典 'store'和每个产品的数量,但您可能只想保留从商店到 Counter 的字典映射对象。

演示:

>>> from collections import defaultdict, Counter
>>> sales_per_store_per_day = [
... {'date':'2014-06-01', 'store':'a', 'product1':10, 'product2':3, 'product3':15},
... {'date':'2014-06-01', 'store':'b', 'product1':20, 'product2':4, 'product3':16},
... {'date':'2014-06-02', 'store':'a', 'product1':30, 'product2':5, 'product3':17},
... {'date':'2014-06-02', 'store':'b', 'product1':40, 'product2':6, 'product3':18},
... ]
>>> by_store = defaultdict(Counter)
>>> for info in sales_per_store_per_day:
... counts = Counter({k: v for k, v in info.items() if k not in ('store', 'date')})
... by_store[info['store']] += counts
...
>>> [dict(v, store=k) for k, v in by_store.items()]
[{'store': 'a', 'product3': 32, 'product2': 8, 'product1': 40}, {'store': 'b', 'product3': 34, 'product2': 10, 'product1': 60}]

关于python - 如何减少/聚合 Python 中每个键的字典列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24286933/

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