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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:06:02