python相同key字典合并

从数据库中查询到几组数据

[{id:1,name:ab,role_id:1,fault_id:2},

{id:1,name:cd,role_id:2,fault_id:2},

{id:2,name:cc,role_id:1,fault_id:2},

{id:1,name:dd,role_id:1,fault_id:4},

{id:3,name:ab,role_id:1,fault_id:2}]

想根据id合并相同的 value 用\n分隔 

想等到的结果

[{id:1,name:ab\ncd\ndd,role_id:1\n2\n1},

{id:2,name:cc,role_id:1,fault_id:2},

{id:3,name:ab,role_id:1,fault_id:2}

]

data_list=[{'id':1,'name':'ab','role_id':1,'fault_id':2},

{'id':1,'name':'cd','role_id':2,'fault_id':2},

{'id':2,'name':'cc','role_id':1,'fault_id':2},

{'id':1,'name':'dd','role_id':1,'fault_id':4},

{'id':3,'name':'ab','role_id':1,'fault_id':2}]

ret = []
ret_id=[]
for data in data_list:
     if data["id"] in ret_id:
          id_idx = ret_id.index(data["id"])
          current_dict = ret[id_idx]
          for key in current_dict.keys():
               if key=="id":
                    continue
               current_dict[key] = "{}\n{}".format(current_dict[key],data[key])
     else:
          ret.append(data)
          ret_id.append(data["id"])

print(ret)

 

记录一个新的写法


```python

data = [
    {"id": 1, "name": "ab", "role_id": 1, "fault_id": 2},
    {"id": 1, "name": "cd", "role_id": 2, "fault_id": 2},
    {"id": 2, "name": "cc", "role_id": 1, "fault_id": 2},
    {"id": 1, "name": "dd", "role_id": 1, "fault_id": 4},
    {"id": 3, "name": "ab", "role_id": 1, "fault_id": 2},
]

result_dict = {}

for item in data:
    if item["id"] in result_dict:
        result_dict[item["id"]]["name"] += "\n" + item["name"]
        result_dict[item["id"]]["role_id"] += "\n" + str(item["role_id"])
    else:
        result_dict[item["id"]] = {"id": item["id"], "name": item["name"], "role_id": str(item["role_id"])}

result_list = list(result_dict.values())
print(result_list)