如何将重复值附加到字典列表中的相同键

时间:2021-04-15 10:32:50

标签: python-3.x dictionary

我有以下包含重复值的字典列表。我需要将重复的值附加到同一个键上,并保留在字典列表中。

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'}]

2 个答案:

答案 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))