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

时间:2014-11-03 23:08:20

标签: python list dictionary

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

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上找到类似的东西,而且我的脑子里已经筋疲力尽了。

请帮我解决这个难题。提前谢谢!

4 个答案:

答案 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_idsset result组合成一个list,而不是将dict与{{1}}组合在一起{{1}},其关键是产品ID(Joran&# 39;答案是这方面的一个例子。