Python如何一行将变量列表转换为键为变量名的字典
Python 变量列表一键转对应键名字典实现
实现方案
方案1:符合oneliner([a,b,c])调用要求的实现
需要引入inspect模块实现变量名自动识别,代码如下:
import inspect def oneliner(var_list): # 取上层调用栈的上下文,解析传入的变量名 call_code = inspect.getframeinfo(inspect.currentframe().f_back).code_context[0] var_names = call_code.split('(')[1].rstrip(')\n').split(',') var_names = [name.strip().lstrip('[').rstrip(']').strip() for name in var_names] # 从上层作用域取变量值 outer_scope = inspect.currentframe().f_back.f_locals return {name: outer_scope[name] for name in var_names}
调用示例:
# 你的业务变量 a = 45 b = 'New York' c = [1,2,3] publication_date_in_europe = "2024-01-01" section_type_code = 1001 # 一行生成字典,长变量可换行写保证可读性 mydict = oneliner([ a, b, c, publication_date_in_europe, section_type_code ])
生成的mydict会自动以变量名作为key,变量值作为value,完全不需要手动写重复的键值对。
方案2:兼容性更强的无依赖实现(推荐生产环境使用)
如果担心栈帧解析在特殊场景(如代码打包、嵌套调用)出问题,可以用变量名字符串列表配合locals()实现,代码更稳定:
# 只需要把变量名写成字符串,一行生成字典 mydict = {k: locals()[k] for k in [ 'a', 'b', 'c', 'publication_date_in_europe', 'section_type_code' ]}
该方案不需要自定义函数,所有Python3版本都支持,执行效率更高。
注意事项
- 方案1的调用语句需要单独占一行,不要嵌套在其他复杂表达式中,避免上下文解析错误
- 如果你是在类方法内部使用,把
locals()换成self.__dict__就能直接转实例属性为字典
内容的提问来源于stack exchange,提问作者JFerro
相关产品推荐
相关产品推荐

