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重复