如何不使用exec将字典键作为新变量名批量赋值?
解决方案
推荐方案:用字典集中存储动态变量
直接生成独立变量会导致命名空间混乱,后续维护排查都麻烦,最规范的做法是用一个字典来统一存放这些动态生成的内容:
import pandas as pd import numpy as np df = pd.read_csv('file.csv') my_dict = {'Freq_0': 'i', 'Freq_2': 'am', 'Freq_3': 'stuck'} # 初始化一个字典用来存所有生成的变量 result_store = {} for k in my_dict.keys(): # 用f-string拼接键名,把对应列的列表存进去 result_store[f'phase_shift_{k}'] = df['1st col'].tolist() result_store[f'imbalance_{k}'] = df['2nd col'].tolist() result_store[f'sum_{k}'] = df['3rd col'].tolist()
访问方式:比如要获取原本想命名为phase_shift_Freq_0的变量,直接用result_store['phase_shift_Freq_0']即可,和直接调用变量名一样方便,且所有相关变量都集中管理,不会污染全局环境。
备选方案:写入全局/局部命名空间(不推荐)
如果你一定要把这些变量直接放到全局或局部命名空间里,可以借助globals()或locals()字典,但这种方式容易引发命名冲突,代码可读性和可维护性差,仅作了解:
import pandas as pd import numpy as np df = pd.read_csv('file.csv') my_dict = {'Freq_0': 'i', 'Freq_2': 'am', 'Freq_3': 'stuck'} for k in my_dict.keys(): # 写入全局命名空间 globals()[f'phase_shift_{k}'] = df['1st col'].tolist() globals()[f'imbalance_{k}'] = df['2nd col'].tolist() globals()[f'sum_{k}'] = df['3rd col'].tolist()
之后你就可以直接用phase_shift_Freq_0这类变量名访问,但不建议在正式代码中这么用。
内容的提问来源于stack exchange,提问作者Irvs
相关产品推荐
相关产品推荐

