如何为数组补充字典缺失值?实现指定匹配标记数组的技术问询
解决方法:生成目标数组并处理字典缺失值
先明确你的核心需求:
- 生成和
df1长度一致的全1数组L1 - 生成
L2数组,其中元素为1的条件是df1对应字典的key存在于df2的所有字典key中,否则为0 - 同时解决字典缺失值补充到数组的问题
步骤1:提取关键数据集合
首先我们需要把df2里所有出现过的key收集到集合中(集合的查询效率比列表高很多):
df1 = [('f', {'abe': 1}), ('f', {'abeli': 1}), ('f', {'mos': 1}), ('f', {'esc': 1})] df2 = [('l', {'mos': 1}), ('l', {'esc': 1})] # 提取df1中的所有字典部分 dict1_part = [sc[1] for sc in df1] # 收集df2里的所有key到集合 df2_all_keys = set() for item in df2: df2_all_keys.update(item[1].keys())
步骤2:生成L1和L2数组
接下来按照需求生成两个目标数组:
# L1是全1数组,长度和dict1_part一致 L1 = [1] * len(dict1_part) # L2:逐个检查dict1_part中每个字典的key是否在df2的key集合里 L2 = [] for d in dict1_part: # 从你的数据来看每个字典只有一个key,用next(iter(d.keys()))快速获取 current_key = next(iter(d.keys())) L2.append(1 if current_key in df2_all_keys else 0) print("L1:", L1) # 输出: L1: [1, 1, 1, 1] print("L2:", L2) # 输出: L2: [0, 0, 1, 1]
步骤3:字典缺失值补充到数组的实现
如果你的场景是需要把所有出现过的key作为统一维度,给每个字典补充缺失key对应的0值,可以这样处理:
# 收集所有出现过的key(df1和df2的key都包含) all_unique_keys = set() for d in dict1_part: all_unique_keys.update(d.keys()) all_unique_keys.update(df2_all_keys) all_unique_keys = sorted(all_unique_keys) # 排序让结果更规整 # 为每个字典生成补充缺失值后的数组 filled_arrays = [] for d in dict1_part: # 用dict.get(key, 0),如果key不存在就返回0 current_array = [d.get(key, 0) for key in all_unique_keys] filled_arrays.append(current_array) print("所有统一key:", all_unique_keys) # 输出: 所有统一key: ['abe', 'abeli', 'esc', 'mos'] print("补充缺失值后的数组:", filled_arrays) # 输出: 补充缺失值后的数组: [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]]
对你现有代码的小修正说明
你原来的代码里有几个需要调整的地方:
L1=len(dict1_part)只会得到一个长度数字,不是数组,应该用[1]*len(dict1_part)生成全1数组- 变量名拼写错误:
print("pl",plant)里的plant应该是pl,dic...是未写完的dict2_part - 没有提前收集
df2的所有key,导致无法高效判断df1的key是否存在
这样调整后就能完美实现你想要的效果啦~
内容的提问来源于stack exchange,提问作者sara jones
相关产品推荐
相关产品推荐

