繁体   English   中英

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

[英]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_idsset ,并result一个list ,你可以将它们组合成一个dict的键是产品ID(Joran的回答是这样的一个例子)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM