Python:如何在for循环中为变量名添加迭代变量值(含Pandas场景)
这个需求我太熟悉了——刚开始用Pandas的时候我也想过直接给变量名加后缀来区分结果,但后来发现用字典管理才是更靠谱的方案,既整洁又方便后续调用。下面给你两种可行的实现方式,优先推荐第一种:
推荐方案:用字典存储结果
字典天生就是用来做键值对映射的,这里我们可以把每个唯一值i作为键,对应的a和b作为值,后续想调用哪个结果直接通过键就能找到,完全不用记一堆零散的变量名。
方式1:分开存储两个结果字典
如果需要单独管理a和b类型的结果,可以初始化两个空字典,循环时把结果分别存进去:
import pandas as pd # 假设你的DataFrame和函数已经定义好 # df = pd.DataFrame(...) # def func(sub_df): ... # 初始化存储结果的字典 a_results = {} b_results = {} # 获取唯一值数组 unique_vals = df.col3.unique() for val in unique_vals: # 筛选当前值对应的子DataFrame sub_df = df[df.col3 == val] # 调用函数得到两个结果 current_a, current_b = func(sub_df) # 将结果存入字典,用当前唯一值作为键 a_results[val] = current_a b_results[val] = current_b
之后要调用某个值对应的结果时,直接通过键访问就行,比如想取val=10对应的a结果,就用a_results[10],非常直观。
方式2:用一个字典存储结果元组
如果不想分开两个字典,也可以把每次的(a, b)作为元组存入同一个字典:
results = {} for val in unique_vals: results[val] = func(df[df.col3 == val]) # 调用时,results[val][0]是a,results[val][1]是b example_a = results[5][0] example_b = results[5][1]
不推荐但可行:动态创建变量
如果你确实需要生成类似a_1、b_2这样的独立变量,可以通过globals()函数或者exec语句实现,但我强烈不建议这么做——零散的变量会让代码难以维护,后续调试也很麻烦:
for val in unique_vals: a, b = func(df[df.col3 == val]) # 动态创建以val为后缀的变量 globals()[f'a_{val}'] = a globals()[f'b_{val}'] = b
比如当val=3时,会生成a_3和b_3两个变量,但如果val是字符串或者特殊字符,可能会导致变量名无效,风险很高。
总之,优先选择字典的方式,这是Python里管理批量结果的标准做法,代码可读性和可维护性都高很多。
内容的提问来源于stack exchange,提问作者MaMo
相关产品推荐
相关产品推荐

