如何基于清洗后字典的公共值生成原字典格式的目标输出?
提取字典公共特征并还原原始格式
问题背景
我已经将字典dic1处理为dic2(移除dic1中每个元素末尾的一位数字完成清洗),目的是找出不同键下的公共值。我已经通过以下代码获取了公共特征集合common:
from functools import reduce dic1 = {"df1":["age_0" , "nnn220","abc70"], "df2":["age_1", "a221","abc71"]} dic2 = {"df1":["age","nnn22","abc7"], "df2":["age", "a22","abc7"]} dataframe_list = list(dic2.values()) common = reduce(lambda a, b: set(a) & set(b), dataframe_list) # 得到的common集合 # common = {'age', 'abc7'}
但我不知道如何将这些公共特征对应回dic1中的原始格式,期望得到的最终输出如下:
final_output = {"df1":["age_0", "abc70"], "df2":["age_1","abc71"]}
解决方案
核心是建立清洗后的值与原始值的映射关系,再根据公共特征筛选每个键对应的原始值,代码实现如下:
from functools import reduce dic1 = {"df1":["age_0" , "nnn220","abc70"], "df2":["age_1", "a221","abc71"]} dic2 = {"df1":["age","nnn22","abc7"], "df2":["age", "a22","abc7"]} # 获取公共特征集合 dataframe_list = list(dic2.values()) common = reduce(lambda a, b: set(a) & set(b), dataframe_list) # 生成最终输出字典 final_output = {} for key in dic1: # 配对当前键下的原始值与清洗后的值 value_pairs = zip(dic1[key], dic2[key]) # 筛选出清洗后的值属于公共集合的原始值 final_output[key] = [orig_val for orig_val, cleaned_val in value_pairs if cleaned_val in common] print(final_output) # 输出结果: {'df1': ['age_0', 'abc70'], 'df2': ['age_1', 'abc71']}
代码说明
- 用
zip(dic1[key], dic2[key])将每个键下的原始值和清洗后的值一一配对,确保对应关系准确 - 通过列表推导式筛选符合条件的原始值,保留
dic1中原有的元素顺序 - 逻辑直接高效,不需要额外的复杂映射结构
内容的提问来源于stack exchange,提问作者ella
相关产品推荐
相关产品推荐

