如何将两个Python字典按关联键值合并为嵌套字典?
解决方案
方法一:字典推导式(简洁高效)
用嵌套的字典推导式一步生成目标字典,这是Python中最简洁的实现方式:
d1 = {'a': ['b','c'], 'd': ['e', 'f']} d2 = {'b':[1, 2], 'c': [3, 4], 'd': [5, 6], 'e': [7, 8], 'f': [9, 10]} d3 = {k: {sub_k: d2[sub_k] for sub_k in v} for k, v in d1.items()} print(d3) # 输出: {'a': {'b': [1, 2], 'c': [3, 4]}, 'd': {'e': [7, 8], 'f': [9, 10]}}
外层遍历d1的所有键值对,内层遍历每个键对应的子键列表,从d2中取出对应值构建子字典。
方法二:普通嵌套循环(直观易懂)
如果更倾向于分步实现,嵌套循环能清晰展示每一步逻辑:
d1 = {'a': ['b','c'], 'd': ['e', 'f']} d2 = {'b':[1, 2], 'c': [3, 4], 'd': [5, 6], 'e': [7, 8], 'f': [9, 10]} d3 = {} # 遍历d1的主键和对应的子键列表 for main_key, sub_keys in d1.items(): # 初始化当前主键对应的子字典 sub_dict = {} # 遍历子键,从d2中取值填充子字典 for sub_key in sub_keys: sub_dict[sub_key] = d2[sub_key] # 将子字典赋值给d3的主键 d3[main_key] = sub_dict print(d3) # 输出: {'a': {'b': [1, 2], 'c': [3, 4]}, 'd': {'e': [7, 8], 'f': [9, 10]}}
补充:避免键不存在的报错
如果d1的子键可能在d2中不存在,可用d2.get(sub_key, 默认值)规避KeyError,示例:
# 以空列表作为默认值 d3 = {k: {sub_k: d2.get(sub_k, []) for sub_k in v} for k, v in d1.items()}
内容的提问来源于stack exchange,提问作者rose
相关产品推荐
相关产品推荐

