如何按给定示例合并字典列表并向list1追加元素输出结果?
合并对应位置字典并移除指定字段的实现方法
需求说明
已有两个字典列表data和data2,需要将两个列表中对应索引位置的字典进行合并,同时移除data字典中的id字段,最终将合并后的结果存入list1。
实现方法
方法一:循环遍历+字典合并
通过索引遍历两个列表,先复制data中的字典并删除id字段(避免修改原数据),再和data2对应位置的字典合并,最后添加到list1中:
data = [{"id":1,"name":"vikash","roll":39},{"id":2,"name":"kumar","roll":3}] data2 = [{"hobby":"football","food":"any"},{"hobby":"basketball","food":"any"}] list1 = [] for d1, d2 in zip(data, data2): temp = d1.copy() del temp["id"] merged_dict = {**temp, **d2} list1.append(merged_dict)
方法二:列表推导式简化写法
用列表推导式压缩代码逻辑,写法更简洁:
data = [{"id":1,"name":"vikash","roll":39},{"id":2,"name":"kumar","roll":3}] data2 = [{"hobby":"football","food":"any"},{"hobby":"basketball","food":"any"}] list1 = [ {k: v for k, v in d1.items() if k != "id"} | d2 for d1, d2 in zip(data, data2) ]
注:
|字典合并运算符仅支持Python 3.9及以上版本,低版本可替换为{**{k:v for k,v in d1.items() if k!='id'}, **d2}
方法三:直接修改原数据(慎用)
如果不需要保留原data列表的内容,可以直接用pop()移除id字段,减少内存开销:
data = [{"id":1,"name":"vikash","roll":39},{"id":2,"name":"kumar","roll":3}] data2 = [{"hobby":"football","food":"any"},{"hobby":"basketball","food":"any"}] list1 = [] for d1, d2 in zip(data, data2): d1.pop("id") list1.append({**d1, **d2})
注意:此方法会改变原
data列表的内容,若需保留原始数据,不建议使用。
验证结果
执行上述任意一种方法后,list1的内容都会符合预期:
[ {"name":"vikash","roll":39,"hobby":"football","food":"any"}, {"name":"kumar","roll":3,"hobby":"basketball","food":"any"} ]
内容的提问来源于stack exchange,提问作者Vikash
相关产品推荐
相关产品推荐

