You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对pandas DataFrame字典用多输出函数通过字典推导生成两个新字典

报错根因
  • 第一种写法错误:字典推导生成的是单字典,每个值为somefunction返回的二元组,直接对字典解包时Python默认迭代字典的键,工作表数量超过2个就会触发解包数量不匹配错误。
  • 第二种写法错误:对字典执行zip(*)操作时,解包的是字典的键而非值,无法得到你需要的df处理结果。
正确实现方案

两种常用实现,都保证每个DataFrame只调用一次somefunction,避免重复计算:

方案1:先收集中间结果,再分别构造字典

最直观易读的写法,适配绝大多数场景:

def somefunction(df):
    df1 = df.apply(lambda x: x*2)
    df2 = df.apply(lambda x: x*4)
    return df1, df2

# 先收集所有(工作表名, 处理后df1, 处理后df2)元组
intermediate = [(key, *somefunction(df)) for key, df in df_dict.items()]
# 分别构造两个结果字典
df_dict1 = {key: df1 for key, df1, df2 in intermediate}
df_dict2 = {key: df2 for key, df1, df2 in intermediate}

方案2:利用zip推导更简洁的写法

适合偏好短代码的场景,逻辑和方案1完全一致:

keys = df_dict.keys()
processed_res = (somefunction(df) for df in df_dict.values())
df_dict1, df_dict2 = [dict(zip(keys, res_group)) for res_group in zip(*processed_res)]

内容的提问来源于stack exchange,提问作者DHJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:54:05