Python如何通过for循环遍历变量对合并字典减少代码冗余
实现方案
你提到的df1/df2/df3实际为Pandas的DataFrame对象(普通Python字典无merge方法),可以通过itertools.combinations生成无重复的两两组合,再循环执行合并、长度统计逻辑即可,代码如下:
from itertools import combinations final_dict = {} # 存储所有待处理的DataFrame及对应名称 df_list = [ ("df1", df1), ("df2", df2), ("df3", df3) ] # 遍历所有唯一两两组合 for (name_x, df_x), (name_y, df_y) in combinations(df_list, r=2): # 生成字典键 dict_key = f"{name_x}_{name_y}" # 执行合并,注意on参数需要传入单个列名组成的列表,不要把多个列名写在同一个字符串里 merged_res = df_x.merge(df_y, on=["column_name1", "column_name2", "column_name3"]) # 存储长度到结果字典 final_dict[dict_key] = len(merged_res)
说明
combinations生成的是不考虑顺序的无重复组合,不会出现df2_df1这类和df1_df2重复的配对,完全符合你的需求- 如果后续需要新增更多DataFrame处理,只需要往
df_list里添加(新df名称字符串, 新df对象)的元组即可,无需修改其他逻辑 - 注意你原有代码中
on参数的写法错误:["column_name1, column_name2, column_name3"]是把三个列名当做一个列名处理,执行时会报找不到列的错误,需要修改为示例中的写法
内容的提问来源于stack exchange,提问作者MAtennis9
相关产品推荐
相关产品推荐

