Python|合并两个字典列表
给定两个字典列表,任务是根据某个值合并这两个字典列表。
方法#1:使用defaultdict
和extend
来合并两个基于school_id的字典列表。
# Python code to merge two list of dictionaries
# based on some value.
from collections import defaultdict
# List initialization
Input1 = [{'roll_no': ['123445', '1212'], 'school_id': 1},
{'roll_no': ['HA-4848231'], 'school_id': 2}]
Input2 = [{'roll_no': ['473427'], 'school_id': 2},
{'roll_no': ['092112'], 'school_id': 5}]
# Using defaultdict
temp = defaultdict(list)
# Using extend
for elem in Input1:
temp[elem['school_id']].extend(elem['roll_no'])
for elem in Input2:
temp[elem['school_id']].extend(elem['roll_no'])
Output = [{"roll_no":y, "school_id":x} for x, y in temp.items()]
# printing
print(Output)
输出:
[{‘school_id’: 1, ‘roll_no’: [‘123445’, ‘1212’]}, {‘school_id’: 2, ‘roll_no’: [‘HA-4848231’, ‘473427’]}, {‘school_id’: 5, ‘roll_no’: [‘092112’]}]
方法 #2:仅使用extend()
。
# Python code to merge two list of dictionaries
# based on some value.
# List initialization
Input1 = [{'roll_no': ['123445', '1212'], 'school_id': 1},
{'roll_no': ['HA-4848231'], 'school_id': 2}]
Input2 = [{'roll_no': ['473427'], 'school_id': 2},
{'roll_no': ['092112'], 'school_id': 5}]
# Iterating and using extend to convert
for elm2 in Input2:
for elm1 in Input1:
if elm2['school_id'] == elm1['school_id']:
elm1['roll_no'].extend(elm2['roll_no'])
break
else:
Input1.append(elm2)
# printing
print(Input1)
输出:
[{‘school_id’: 1, ‘roll_no’: [‘123445’, ‘1212’]}, {‘school_id’: 2, ‘roll_no’: [‘HA-4848231’, ‘473427’]}, {‘school_id’: 5, ‘roll_no’: [‘092112’]}]