我有以下包含重复值的字典列表。我需要将重复的值附加到同一个键上,并保留在字典列表中。
veh_entry=[{'name': 'scott', 'id': '17'},{'name': 'thomas', 'id': '18'}, {'name': 'tony', 'id': '17'}]
我尝试了以下方法,但似乎没有按预期工作
add=[]
test={}
for item in veh_entry:
if item['id'] not in add:
test['name']=item['name']
add.append(item['id'])
else:
test['name']=(test['name']+ ','+item['name'])
#预期: 预期的字典必须如下:
[{'name': 'scott, tony', 'id':'17'},{'name': 'thomas', 'id': '18'}]
答案 0 :(得分:0)
所以基本逻辑是比较列表中不同项目的 id,如果 id 匹配,则加入名称并从列表中删除重复的项目
final_result = []
for i in range(len(veh_entry)-1):
for j in range(i+1,len(veh_entry)):
a = dict()
if veh_entry[i]['id'] == veh_entry[j]['id']:
a['name'] = veh_entry[i]['name'] +','+veh_entry[j]['name']
a['id'] = veh_entry[i]['id']
veh_entry.pop(j)
final_result.append(a)
else:
final_result.append(veh_entry[j])
print(final_result)
输出:- [{'name': 'thomas', 'id': '18'}, {'name': 'scott,tony', 'id': '17'}]
答案 1 :(得分:0)
你可以这样做:
def remove_dup(arr):
names=[] # using list here
ids=[] # instead of dict
for x in arr:
id,name=x['id'],x['name']
if id not in ids: # search for existing id
ids.append(id)
names.append(name)
else:
names[ids.index(id)]+=", "+name
return [{'name':name,'id':id} for name,id in zip(names,ids)]
veh_entry=[{'name': 'scott', 'id': '17'},{'name': 'thomas', 'id': '18'}, {'name': 'tony', 'id': '17'}]
print(remove_dup(veh_entry))