如何在词典列表中添加两项

2024-06-14 23:15:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在有一个这样的任务,我需要你的帮助。我的问题是:

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上没有发现任何类似的东西,我的脑子里已经没有什么想法了。你知道吗

请帮我解这个谜。提前谢谢!你知道吗


Tags: nameidbodyprodpricequantityuniquecream
3条回答

我在这个问题上找到了一个中间解决方案,这要感谢@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}}

感谢所有给我建议的人!你知道吗

这不是一个真正的难题

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()

相关问题 更多 >