鱼C论坛

 找回密码
 立即注册
查看: 1322|回复: 11

[已解决]如何根据获取的内容作为变量名,并赋予相应的值

[复制链接]
发表于 2021-8-15 17:30:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有两个列表
listA = ['a','b','c','d','e']
listB = [1,3,True,1.12,'测试']


通过代码实现,从listB中获取的元素,从listA中获取的元素做为变量名,按相应位置赋值变量

得到以下变量
a = 1
b = 3
c = True
d = 1.12
e = '测试'
最佳答案
2021-8-15 19:04:30
listA = ['a','b','c','d','e']
listB = [1,3,True,1.12,'测试']
dict={}
for i in listA:
    globals()[i] = listB[listA.index(i)]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-15 18:22:12 | 显示全部楼层
#默认listA,listB存在且len(listA)<=len(listB)
for index in len(listA):
    exec('%(key)s=%(value)s'%{'key':listA[index],'vaule':listB[index]})
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-15 19:04:30 | 显示全部楼层    本楼为最佳答案   
listA = ['a','b','c','d','e']
listB = [1,3,True,1.12,'测试']
dict={}
for i in listA:
    globals()[i] = listB[listA.index(i)]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-15 19:09:40 | 显示全部楼层
listA = ['a','b','c','d','e']
listB = [1,3,True,1.12,'测试']
for i in range(0,len(listA)):
    # 这里用try的原因是如果类型为str的话会报NameError的错误
    try:
        exec(str(listA[i]) + "=" + str(listB[i]))
    except NameError:
        exec(str(listA[i]) + "=" + "'" + str(listB[i]) + "'")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-15 19:35:39 | 显示全部楼层
listA = ['a','b','c','d','e']
listB = [1,3,True,1.12,'测试']
for i,j in zip(listA,listB):
    print(i,'=',j)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-16 00:43:38 | 显示全部楼层

我的天,你这提醒了我,这globals()还可以当做一般的字典来用! 哈哈
所以,直接update() , 简直是骚操作呀,
>>> listA = ['a','b','c','d','e']
>>> listB = [1,3,True,1.12,'测试']
>>> globals().update(dict(zip(listA, listB)))  
>>> a
1
>>> e
'测试'
>>> 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-16 09:18:34 | 显示全部楼层
楼上正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-17 16:06:25 | 显示全部楼层

代码复制上去貌似执行不了呢?
不过感谢告知exec()函数,已自行百度了。谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-17 16:09:18 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-17 16:18:24 | 显示全部楼层

刚刚百度了globals()函数作用,是将全部全局变量,以字典的形式返回,现在将key和value加到globals()字典中去,就直接等于创建了这个变量了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-17 20:07:03 | 显示全部楼层
本帖最后由 白two 于 2021-8-17 20:15 编辑
非凡 发表于 2021-8-17 16:18
刚刚百度了globals()函数作用,是将全部全局变量,以字典的形式返回,现在将key和value加到globals()字典 ...


我是这样理解的,返回的字典应该只是一个呈现方式,返回结果应该是内存里的变量,也就是全局命名空间的内存,但它也有字典的特性,所以可以增加键值对,但是内存地址对应的是全局命名空间,所以就相当于直接增加了一个变量
a = 1
b = 2
print(globals())
print(id(globals()))
c = 3
d = 4
print(globals())
print(id(globals()))

运行结果:
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001FF96CF6D00>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:\\Users\\21064\\Desktop\\pyPractice\\spider\\test.py', '__cached__': None, 'a': 1, 'b': 2}
2197259772544
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001FF96CF6D00>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:\\Users\\21064\\Desktop\\pyPractice\\spider\\test.py', '__cached__': None, 'a': 1, 'b': 2, 'c': 3, 'd': 4}
2197259772544

你看哈,加了新的变量,但是全局命名空间的id没有变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-19 17:40:40 | 显示全部楼层
白two 发表于 2021-8-17 20:07
我是这样理解的,返回的字典应该只是一个呈现方式,返回结果应该是内存里的变量,也就是全局命名空间的内 ...

明白了,谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 00:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表