python将元组转为字典,python字典的值可以是变量吗
当我们用Python写一个类的时候,如果有些成员变量需要用字典来命名和赋值,该怎么办?本文主要介绍如何使用Python将字典转换成成员变量的一些信息。有需要的可以参考一下。
00-1010技术背景:使用__dict__定义成员变量的嵌套字典来引用成员变量的摘要。
目录
当我们用Python写一个类的时候,如果有些成员变量需要用字典来命名和赋值,该怎么办?这种情况在从文件(如json、npz等)中读取字典变量时最为常见。)放入内存,然后将它们赋给类的成员变量或生成的实例变量。
技术背景
python中__dict__的方法。直接支持update()进行操作,避免使用locals()、vars()和eval()函数。我们可以直接看这样一个案例:
In [1]: dict_a={a:1, b:2}
In [2]: dict_b={c:3}
[3]:中的D类(对象):
. def __init__(self):
. self.d=4
.自我。__词典_ _。更新(字典_a)
.自我。__词典_ _。更新(字典_b)
.
In [4]: new_D=D()
In [5]: new_D.__dict__
Out[5]: {d: 4, a: 1, b: 2, c: 3}
[6]:中新_D.a
Out[6]: 1
[7]:新特区
[7]: 3
在这种情况下,我们在类外定义了两个字典dict_a和dict_b,字典的键值都是字符串的格式。而且我们知道,在python中不使用eval,字符串格式是不能直接作为变量名的。但是,字典通过__dict__的方法导入后。update(),字典中的所有键值都将被自动识别并作为成员变量赋给当前类。但是,这种方法有一个缺点,就是只能通过单级字典来赋值。如果遇到有层次结构的字典,它不会自动区分层次结构进行赋值,比如下面的代码:
in[15]: dict _ a={ f : { h :8 }, g:7}
在[16]:中new_D=D()
在[17]:新_ D. __字典_ _
Out[17]: {d: 4, f: {h: 8}, g: 7, c: 3}
使用__dict__定义成员变量
根据上一章末尾提到的这个特殊场景,我们需要递归计算字典中的元素。如果我们遇到一个嵌套的dictionary元素,我们将递归地将该元素添加到下一级的成员变量中。具体代码如下:
dict_a={f:{h:8}, g:7}
dict_b={c:3}
D:级
def __init__(self,*args):
对于args:中的arg
对于k,v在arg.items():中
if isinstance(v,dict):
自我。__dict__[k]=D(v)
else:
自我。__dict__[k]=v
new_D=D(字典_a,字典_b)
print (new_D.__dict__)
打印(新_D.f.h)
的最终输出如下:
{f: __main__。位于0x7fd2f32a4340的d对象
, g: 7, c: 3}
八
可以看到,我们最终通过new_D.f.h方法成功读取了原始嵌套字典中的值。虽然这样的写法看起来不太优雅,但似乎也没有更好的解决办法。而且通过这个小问题的练习,还发现了另一个稍微有趣的问题:在python中更新字典类型时,如果关键字符串有一个点,比如parDict[group1.b]=3,那么只能以这样的字符串形式更新。如果使用parDict.update(group1.b=4 ),将会出现错误,因为点在python中。
标识符的有效字符与Python 2.x:中的相同,包括大小写字母A到Z、下划线_以及除第一个字符之外的数字0到9。
嵌套字典转成员变量
本文要解决的问题场景如下:如果一个给定的字典,比如从json文件或者npz文件加载的数据,是字典的数据结构,如果我们要将这个字典赋给一个类,并使字典的键和值作为该类的成员变量名和成员变量值,那么如何实现呢?对于扁平化的字典(没有嵌套字典),我们可以直接使用update将字典中的所有键和值转换为当前类的成员变量。比较麻烦的是有嵌套字典的层次字典。这时,我们只能使用循环,递归地给类的成员变量赋值。
总结概要
https://blog . csdn . net/csrh 131/article/details/100138474https://stack overflow.com/questions/67662925/Dictionary-keys-with-a-dot-do-work-with-update此处。本文介绍了如何使用Python将字典转换成成员变量。有关将Python字典转换为成员变量的更多信息,请搜索流行的IT软件开发工作室以前的文章或继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。