[英]How to add two items in list of dictionaries
我现在有这样的任务,需要您的帮助。 这是我的问题:
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上没有找到任何类似的东西,我的头已经筋疲力尽了。
请帮助我解决这个难题。 提前致谢!
这不是一个难题
d= {}
for item in lst.values():
d[item["prod_id"]] = d.get(item["prod_id"],0) + item["quantity"]
也许...假设我了解您想要...
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()
感谢@ 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}}
感谢所有给我建议的人!
为了帮助您入门,请理解以下列表:
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
的键是产品ID(Joran的回答是这样的一个例子)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.