我有以下数据
data = [{'item': 'A', 'price': '$52'},
{'item': 'B', 'price': '$21'},
{'item': 'C', 'price': '$35'},
{'item': 'A', 'price': '$52'},
{'item': 'A', 'price': '$52'},
{'item': 'B', 'price': '$21'}]
如何在不使用panda和仅使用python 3的情况下聚合项目A、B和C+感谢任何能在这里帮助我的链接。
预期输出为
A $156
B $42
C $35
我已经尝试了以下代码:
for key, group in itertools.groupby(sorted_data, lambda item: item['item']):
print(key, sum([item["item"] for item in group]))
我得到以下错误:
TypeError: unsupported operand type(s) for +: 'int' and 'str'
有没有更简单的解决方案:
from collections import defaultdict
data = [
{"item": "A", "price": "$52"},
{"item": "B", "price": "$21"},
{"item": "C", "price": "$35"},
{"item": "A", "price": "$52"},
{"item": "A", "price": "$52"},
{"item": "B", "price": "$21"},
]
result = defaultdict(list)
for d in data:
result[d["item"]].append(d["price"])
result = {key: f"${sum(int(v[1:]) for v in value)}" for key, value in result.items()}
print(result)
输出:
{'A': '$156', 'B': '$42', 'C': '$35'}
您正在尝试求和
item
,而不是price
。price
是一个以'$'
开头的字符串,所以你不能指望sum
会神奇地处理它(即,删除'$'
,将其余部分相加为数字,然后在完成后加上'$'
(。
最简单的解决方案是手动剥去price
的第一个字符,使用sum
,然后在打印时再次准备$
。
def key_func(d):
return d['item']
for key, group in itertools.groupby(sorted(data, key=key_func), key=key_func):
print(key, '$' + str(sum(int(item['price'].lstrip('$')) for item in group)))
输出
A $156
B $42
C $35