我现在有这样的任务,我需要你的帮助。这是我的问题:
lst = [
{'price': 0.0, 'name': 'Arber Hair & Body Wash', 'prod_id': '17337', 'quantity': 2.0},
{'price': 14.0, 'name': 'Arber Hair & Body Wash', 'prod_id': '17337', 'quantity': 1.0},
{'price': 19.0, 'name': 'Vitamin E Illuminating Moisture Cream', 'prod_id': '21381', 'quantity': 2.0}
]
我需要有这样的结果:
lst = [
{'price': 0.0, 'name': 'Arber Hair & Body Wash', 'prod_id': '17337', 'quantity': 3.0},
{'price': 19.0, 'name': 'Vitamin E Illuminating Moisture Cream', 'prod_id': '21381', 'quantity': 2.0}
]
这意味着我需要在列表中搜索具有相同prod_id
值的词典并汇总其quantity
值。
我尝试搜索唯一的prod_id
并将其保存在一组中。
unique = set()
for i in lst:
if i['prod_id'] not in unique:
unique.add(i['prod_id'])
但看起来它不会起作用,因为它们都在循环中。 我没有在stackoverflow上找到类似的东西,而且我的脑子里已经筋疲力尽了。
请帮我解决这个难题。提前谢谢!
答案 0 :(得分:1)
这不是一个难题
d= {}
for item in lst.values():
d[item["prod_id"]] = d.get(item["prod_id"],0) + item["quantity"]
也许......假设我明白你想要的东西......
答案 1 :(得分:1)
lst = [
{'price': 0.0, 'name': 'Arber Hair & Body Wash', 'prod_id': '17337', 'quantity': 2.0},
{'price': 14.0, 'name': 'Arber Hair & Body Wash', 'prod_id': '17337', 'quantity': 1.0},
{'price': 19.0, 'name': 'Vitamin E Illuminating Moisture Cream', 'prod_id': '21381', 'quantity': 2.0}
]
d = {}
for l in lst:
_id = l['prod_id']
q = d.get(_id)['quantity'] + l['quantity'] if _id in d else l['quantity']
l.update({'quantity': q})
d.setdefault(_id, {}).update(l)
print d.values()
答案 2 :(得分:0)
由于@joran-beasley:
,我在这个问题上找到了一个中间解决方案d = {}
for l in lst:
_id = l['prod_id']
if _id in d:
d[_id]['quantity'] += l['quantity']
else:
d[_id] = l
结果我们将得到一本字典词典
{'17337': {'price': 14.0, 'name': 'Arber Hair & Body Wash', 'quantity': 3},
'21381': {'price': 19.0, 'name': 'Vitamin E Illuminating Moisture Cream', 'quantity': 2}}
感谢所有给我建议的人!
答案 3 :(得分:-1)
为了帮助您入门,列表理解:
prod_ids = [ entry[ 'prod_id' ] for entry in lst ]
可能是第一步。但要获得唯一 prod_ids
,您可能希望将其转换为set
:
prod_ids = set( [ entry[ 'prod_id' ] for entry in lst ] )
然后,您可以迭代生成的prod_ids
并汇总与每个匹配的lst
条目,使用您喜欢的任何规则来组合条目。例如:
result = []
for prod_id in prod_ids:
matches = [ item for item in lst if item[ 'prod_id' ] == prod_id ]
# Now combine the items in matches, which all have the same prod_id, using
# whatever rules are necessary, until you have just one summarized item.
# Append that to result.
您可以将prod_ids
和set
result
组合成一个list
,而不是将dict
与{{1}}组合在一起{{1}},其关键是产品ID(Joran&# 39;答案是这方面的一个例子。