我有带有产品信息的字典列表。我需要总结相同产品的价格字段,并以相同格式获得结果。
我有:
data = [
{'title': 'Apple', 'price': '200'},
{'title': 'Apple', 'price': '300'},
{'title': 'Apple', 'price': '400'},
{'title': 'Samsung', 'price': '250'},
{'title': 'Sony', 'price': '100'}
]
我需要:
data = [
{'title': 'Apple', 'price': '900'},
{'title': 'Samsung', 'price': '250'},
{'title': 'Sony', 'price': '100'}
]
答案 0 :(得分:2)
itertools.groupby
:
[
{'title': k, 'price': str(sum(int(i['price']) for i in g))}
for k, g in itertools.groupby(data, key=lambda x: x['title'])
]
for k, g in itertools.groupby(data, key=lambda x: x['title'])
遍历通过将data
上的title
分组而创建的密钥组{'title': k, 'price': str(sum(int(i['price']) for i in g))}
是对dict的理解,其中包含price
的值,该值是通过对组进行迭代并sum
设置price
来创建的示例:
In [472]: data = [
...: {'title': 'Apple', 'price': '200'},
...: {'title': 'Apple', 'price': '300'},
...: {'title': 'Apple', 'price': '400'},
...: {'title': 'Samsung', 'price': '250'},
...: {'title': 'Sony', 'price': '100'}
...: ]
In [473]: [{'title': k, 'price': str(sum(int(i['price']) for i in g))} for k, g in itertools.groupby(data, key=lambda x: x['title'])]
Out[473]:
[{'title': 'Apple', 'price': '900'},
{'title': 'Samsung', 'price': '250'},
{'title': 'Sony', 'price': '100'}]
如果输入没有排序,则需要首先根据title
键对其进行排序,即:
sorted(data, key=lambda x: x['title'])
答案 1 :(得分:0)
使用此:
data = [
{'title': 'Apple', 'price': '200'},
{'title': 'Apple', 'price': '300'},
{'title': 'Apple', 'price': '400'},
{'title': 'Samsung', 'price': '250'},
{'title': 'Sony', 'price': '100'}
]
price = {}
for row in data:
if row['title'] not in price:
price[row['title']] = 0
price[row['title']] += int(row['price'])
data = []
for title in price:
data.append({'title': title, 'price': str(price[title])})
print(data);