Python 如果字典列表中存在重复记录,如何添加值?

Python 如果字典列表中存在重复记录,如何添加值?,python,python-3.x,Python,Python 3.x,我尝试过其他解决方案,但仍然没有成功,我的问题是我有一个字典列表,我必须在其中检查键(人员姓名)中是否有重复值: 样本列表: [{"id": 1,"name": "jack","count": 7},{"id": 12,"name": "jack","count": 5}] 如果名称重复,则应在密钥计数中添加值,结果应为: [{"id": 1,"name": "jack","count": 12}] 已编辑:ID不重要,我至少需要一个ID才能显示。详细的解决方案可能是: new = {}

我尝试过其他解决方案,但仍然没有成功,我的问题是我有一个字典列表,我必须在其中检查键(人员姓名)中是否有重复值:

样本列表:

[{"id": 1,"name": "jack","count": 7},{"id": 12,"name": "jack","count": 5}]
如果名称重复,则应在密钥计数中添加值,结果应为:

[{"id": 1,"name": "jack","count": 12}]

已编辑:ID不重要,我至少需要一个ID才能显示。

详细的解决方案可能是:

new = {}

for d in data:
    name = d["name"]
    if name in new:
        new[name]["count"] += d["count"]
    else:
        new[name] = dict(d)

result = list(new.values())
注:这可以通过使用和方法来简化,但我认为这一个更具可读性


由于
id
字段不太重要,我将创建一个
dict
,其中键为
name
,值为列表中的项目值

from collections import defaultdict
a = [{"id": 1,"name": "jack","count": 7},{"id": 12,"name": "jack","count": 5}]
d = defaultdict(list) 
迭代列表并映射键和值

for idx,i in enumerate(a):
    d[i['name']].append(i) #key is 'name'
此时,
d
将如下所示

{'jack':[{'count':7,'id':1,'name':'jack'},{'count':5,'id':12, 'name':'jack'}]}

现在,如果列表的长度是
>1
意味着我们必须迭代
列表
,进行求和并更新计数

for k,v in d.items():
    if len(v) > 1:
        temp = v[0]
        for t in v[1:]:
            temp['count'] = temp['count']+t['count'] #update the count
        d[k] = temp
print(list(d.values())) #[{'count': 12, 'id': 1, 'name': 'jack'}]
为了处理
计数
丢失的情况,如

[{“id”:1,“name”:“jack”},{“id”:12,“name”:“jack”,“count”:5}]

将上述计数更新逻辑替换为


temp['count']=temp.get('count',0)+t.get('count',0)

为什么
id
应该是
1
?是否只有两个重复值,或者@BearBrown可能会有更多遗憾,但id并不重要。我需要至少一个id才能显示。不幸的是,可能有两个以上的@Talhaisrr重复