Python同结构嵌套字典逐元素减法与差值均值计算实现咨询
实现方案
首先导入依赖库:
import numpy as np
步骤1:生成差值字典C
逻辑:遍历A、B的所有共同键,对每个键对应的两个列表按位置逐一处理:
- 若当前位置A或B的子列表为空,对应位置返回空列表
- 若两者都非空,逐元素做
A对应元素 - B对应元素的差值计算
C = {} # A、B键完全一致,直接遍历A的键即可 for key in d['A'].keys(): a_list = d['A'][key] b_list = d['B'][key] c_list = [] # 按位置配对处理子列表 for a_sub, b_sub in zip(a_list, b_list): # 任意一方为空则对应位置返回空列表 if len(a_sub) == 0 or len(b_sub) == 0: c_list.append([]) else: # 逐元素做差后转为普通列表 diff = (np.array(a_sub) - np.array(b_sub)).tolist() c_list.append(diff) C[key] = c_list
步骤2:生成均值字典D
逻辑:对C中每个键的值,提取所有非空子列表的元素计算整体均值;如果当前键下无有效元素,可按需设置默认占位值(示例用np.nan占位)
D = {} for key, c_list in C.items(): # 提取所有非空子列表的元素,合并为一维集合 valid_values = [] for sub_list in c_list: if len(sub_list) > 0: valid_values.extend(sub_list) # 计算均值,无有效元素时返回默认值 D[key] = np.mean(valid_values) if len(valid_values) > 0 else np.nan
效果验证
用你给出的示例数据测试:
# 示例测试数据 d = { 'A': { 'key1': [[3],[],[],[]], 'key2': [[1,2,3], [], [4,5,6], []] }, 'B': { 'key1': [[],[],[],[]], 'key2': [[7,8,9], [], [10,11,12], []] } }
运行代码后输出结果:
C['key2']为[[-6, -6, -6], [], [-6, -6, -6], []]D['key2']为-6.0,D['key1']为nan
内容的提问来源于stack exchange,提问作者7Programmer
相关产品推荐
相关产品推荐

