Python嵌套字典子键提取与批量同步新增参数咨询
我来帮你搞定这两个嵌套字典相关的需求,直接上代码和实用解释,一看就懂~
问题1:提取所有子键到空列表
你提到所有子字典的结构完全一致,这里提供两种实现方式:
方式一:快速提取(利用结构一致特性)
既然所有子字典的键都相同,直接取任意一个子字典的键即可,效率最高:
# 初始化空列表 sub_keys = [] # 快速获取第一个子字典(用next(iter())直接取字典的第一个值) first_sub_dict = next(iter(d.values())) # 将所有子键追加到列表 sub_keys.extend(first_sub_dict.keys()) print(sub_keys) # 输出: [u'Owner Name', u'Email', u'Manager Name']
方式二:通用提取(兼容子键不一致场景)
如果以后子字典结构可能有变化,这个方法能收集所有唯一的子键:
sub_keys = [] for sub_dict in d.values(): for key in sub_dict.keys(): if key not in sub_keys: sub_keys.append(key)
问题2:同步新增参数到所有子字典
要实现给指定id的子字典加参数后自动同步到所有其他子字典,推荐封装一个复用函数,也可以直接写一次性逻辑:
方案:封装同步函数(推荐复用)
每次新增参数后,调用函数就能一键同步:
def sync_new_fields(nested_dict, target_id): # 拿到目标子字典的所有键(包括新增的) target_all_keys = nested_dict[target_id].keys() # 遍历所有子字典,确保每个都有目标字典的所有键 for sub_dict in nested_dict.values(): for key in target_all_keys: # 如果当前子字典没有这个键,就同步目标字典的值 if key not in sub_dict: sub_dict[key] = nested_dict[target_id][key] # 使用示例:先给10L的子字典加新参数 d[10L][u'Department'] = u'Engineering' d[10L][u'Phone'] = u'123456' # 调用函数同步所有子字典 sync_new_fields(d, 10L) # 验证12L的子字典 print(d[12L]) # 输出会包含新增的Department和Phone键值对
直接写逻辑(一次性使用)
如果不需要复用,直接写代码也很简单:
# 给10L的子字典加新参数 d[10L][u'Team'] = u'Data Science' # 用问题1里得到的sub_keys作为原始键列表,找出新增的键 new_keys = [k for k in d[10L].keys() if k not in sub_keys] # 遍历所有子字典同步新增参数 for sub_id, sub_dict in d.items(): for key in new_keys: sub_dict[key] = d[10L][key]
两种方案都能完美实现需求,根据你的使用场景选择就行~
内容的提问来源于stack exchange,提问作者Raghav Patnecha
相关产品推荐
相关产品推荐

