Python 3.7中如何将对象列表转为字典?解决属性错误
解决Python中将变量列表转为对应名字-值字典的问题
你遇到的AttributeError: 'int' object has no attribute '__name__'完全在情理之中——像整数、字符串这类基本数据类型根本没有__name__属性,这个属性是为函数、类、模块这类可命名对象设计的。你的核心需求是把变量名(比如x、y)作为字典的键,变量对应的值作为字典的值,但你之前的思路是从变量的值(比如1、2)入手去获取名字,这本质上是行不通的,因为值本身不知道自己被哪个变量引用。
下面给你几种在Python 3.7+中实现需求的可靠方法:
方法1:直接使用字典字面量(最直观)
如果变量数量不多,直接手动构建字典是最简单清晰的方式:
x, y, z = 1, 2, 3 some_dict = {'x': x, 'y': y, 'z': z} # 输出: {'x': 1, 'y': 2, 'z': 3}
方法2:利用作用域字典动态生成(适合多变量场景)
如果需要处理大量变量,可以借助locals()或globals()获取当前作用域的变量映射,再筛选出你需要的变量:
x, y, z = 1, 2, 3 # 指定要转换的变量名列表 target_variables = ['x', 'y', 'z'] # 用字典推导式生成目标字典 some_dict = {var: locals()[var] for var in target_variables}
这里locals()会返回当前局部作用域的所有变量组成的字典,我们通过指定变量名字符串列表,精准提取需要的键值对。
方法3:从源头避免转换(更优雅)
如果你的场景允许,一开始就直接定义字典而不是拆分单个变量,能彻底跳过转换步骤:
some_dict = {'x': 1, 'y': 2, 'z': 3} # 后续如果需要单独使用变量,再从字典中取出 x, y, z = some_dict['x'], some_dict['y'], some_dict['z']
补充:原代码的问题拆解
你之前的代码把变量值存入some_list,然后遍历列表中的整数去取__name__——但整数是字面量,没有名字属性,自然会报错。要获取变量名对应的字符串,必须从变量名本身的字符串入手,而不是变量的值。
内容的提问来源于stack exchange,提问作者Gооd_Mаn
相关产品推荐
相关产品推荐

