iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何利用Python将字典转为成员变量
  • 861
分享到

如何利用Python将字典转为成员变量

2024-04-02 19:04:59 861人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录技术背景使用__dict__定义成员变量嵌套字典转成员变量总结概要参考链接技术背景 当我们在python中写一个class时,如果有一部分的成员变量需要用一个字典来命名和赋值,此

技术背景

当我们在python中写一个class时,如果有一部分的成员变量需要用一个字典来命名和赋值,此时应该如何操作呢?这个场景最常见于从一个文件(比如JSON、npz之类的文件)中读取字典变量到内存当中,再赋值给一个类的成员变量,或者已经生成的实例变量。

使用__dict__定义成员变量

Python中直接支持了__dict__.update()这样的方法来操作,避免了对locals()、vars()和eval()函数的使用,我们可以直接看这样的一个案例:

In [1]: dict_a = {'a':1, 'b':2}

In [2]: dict_b = {'c':3}

In [3]: class D(object):
   ...:     def __init__(self):
   ...:         self.d = 4
   ...:         self.__dict__.update(dict_a)
   ...:         self.__dict__.update(dict_b)
   ...: 

In [4]: new_D = D()

In [5]: new_D.__dict__
Out[5]: {'d': 4, 'a': 1, 'b': 2, 'c': 3}

In [6]: new_D.a
Out[6]: 1

In [7]: new_D.c
Out[7]: 3

在这个案例中,我们在类的外部定义了两个字典dict_a和dict_b,字典的key值都是字符串的格式。而我们知道字符串格式在python中如果不使用eval,是不能直接作为变量名来使用的。而通过__dict__.update()的方法将字典导入后,会自动识别其中所有的key和value值,转而赋值给当前类作为成员变量。但是这个方法有一个缺点是,只能通过单层的字典来赋值,如果遇到有层级结构的字典,是不会自动分辨层级结构进行赋值的,比如下方的代码:

In [15]: dict_a = {'f':{'h':8},'g':7}

In [16]: new_D = D()

In [17]: new_D.__dict__
Out[17]: {'d': 4, 'f': {'h': 8}, 'g': 7, 'c': 3}

嵌套字典转成员变量

根据上一个章节中最后提到的这个特殊场景,我们需要对字典内的元素进行递归,如果遇到嵌套的字典元素,则递归的将该元素添加到下一层级的成员变量中,具体代码如下所示:

dict_a = {'f':{'h':8},'g':7}
dict_b = {'c':3}

class D:
    def __init__(self, *args):
        for arg in args:
            for k, v in arg.items():
                if isinstance(v, dict):
                    self.__dict__[k] = D(v)
                else:
                    self.__dict__[k] = v

new_D = D(dict_a, dict_b)
print (new_D.__dict__)
print (new_D.f.h)

最终的输出结果如下所示:

{'f': <__main__.D object at 0x7fd2f32a4340>
, 'g': 7, 'c': 3}
8

可以看到,我们最终通过new_D.f.h的方法,成功读取了原有的嵌套字典中的value。虽然这种写法看起来不是很优雅,但是似乎也没有更好的解决方案。并且,通过这个小问题的实践,发现了另外一个略有意思的问题:对python中的字典类型进行更新时,如果key的字符串中带有点号,比如parDict['group1.b'] = 3,只能通过这样的字符串的形式进行更新,如果使用parDict.update(group1.b=4)则会发生报错,这是因为点号在python中不是一个标识符,不能用于命名,原文内容如下:

The valid characters for identifiers are the same as in Python 2.x: the uppercase and lowercase letters A through Z, the underscore _ and, except for the first character, the digits 0 through 9.

总结概要

本文所解决的问题场景是这样的:如果给定一个字典,比如一般从json文件或者npz文件中加载出来的数据都是字典的数据结构,如果我们希望把这个字典赋值给一个类,且使得字典的key和value分别作为类的成员变量名和成员变量值,那么该如何实现呢?对于一个展平的字典而言(没有嵌套字典),我们直接使用update就可以将字典中的所有key和value转变为当前类的成员变量。比较麻烦的是包含有嵌套字典的层级结构字典,此时我们只能使用循环,并且递归的对类的成员变量进行赋值。

参考链接

  • https://blog.csdn.net/csrh131/article/details/100138474
  • Https://stackoverflow.com/questions/67662925/dictionary-keys-with-a-dot-does-not-work-with-update

到此这篇关于如何利用Python将字典转为成员变量的文章就介绍到这了,更多相关Python字典转成员变量内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 如何利用Python将字典转为成员变量

本文链接: https://www.lsjlt.com/news/144202.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何利用Python将字典转为成员变量
    目录技术背景使用__dict__定义成员变量嵌套字典转成员变量总结概要参考链接技术背景 当我们在Python中写一个class时,如果有一部分的成员变量需要用一个字典来命名和赋值,此...
    99+
    2024-04-02
  • python如何将json转为字典
    可以使用`json.loads()`函数将JSON字符串转为Python字典。示例代码:```pythonimport json# ...
    99+
    2023-09-13
    python json
  • python如何将两个列表转化为字典
    小编给大家分享一下python如何将两个列表转化为字典,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!将两个列表转化为字典如下方法将会把两个列表转化为单个字典。de...
    99+
    2023-06-27
  • php如何将变量转换成float
    这篇文章主要为大家展示了“php如何将变量转换成float”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php如何将变量转换成float”这篇文章吧。方法:1、在变量或值前添加“(float)”...
    99+
    2023-06-15
  • python 如何将字典写为json文件
    目录python 将字典写为json文件字典结构如下写为jsonPython txt文件读取写入字典(json、eval)使用json转换方法使用str转换方法python 将字典写...
    99+
    2024-04-02
  • 如何利用python将pdf文档转为word?
    1.前言 有些时候,我们需要将pdf文档转换为word文档进行处理,但市面上的一些pdf软件往往需要付费才能使用。那么作为一名技术人员,如何才能实现pdf转word自由? 2.准备工作 提前安装好py...
    99+
    2023-09-05
    word python pdf
  • php如何将变量转为数组类型
    这篇“php如何将变量转为数组类型”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何将变量转为数组类型”文章吧。转为数...
    99+
    2023-06-29
  • python如何将两个列表组合成字典
    这篇文章将为大家详细讲解有关python如何将两个列表组合成字典,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。将两个列表组合成字典邮编功能在python中有很多优点。 使用zip函数,我们可以从两个列表创...
    99+
    2023-06-27
  • 利用JAVA如何实现将汉字转换为ASCII
    今天就跟大家聊聊有关利用JAVA如何实现将汉字转换为ASCII,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JAVA 中实现整句汉字拆分、转换为ASCII实例详解大家都知道,一个汉字...
    99+
    2023-05-31
    java 汉字 ascii
  • 如何利用python将Xmind用例转为Excel用例
    目录1、Xmind用例编写规范2、转换代码3、使用1、Xmind用例编写规范 1:需求大模块2:大模块中的小模块(需要根据需求来看需要多少层)3:用例等级和用例名称用例等级(转换成...
    99+
    2024-04-02
  • json字符串如何转为php变量
    这篇文章主要为大家展示了“json字符串如何转为php变量”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“json字符串如何转为php变量”这篇文章吧。在php中,可以利用json_decode(...
    99+
    2023-06-25
  • python如何将两个列表合并成字典
    可以使用zip函数将两个列表合并成字典。zip函数会将两个列表的对应元素按顺序组合成一个新的元组,然后再将这些元组转换成字典。下面是...
    99+
    2023-09-26
    python
  • python如何将整形变成字符串
    要将一个整数转换为字符串,你可以使用内置的str()函数。下面是一个例子:pythonnum = 123str_num = str(...
    99+
    2023-10-21
    python
  • 如何利用Python将html转为pdf、word文件
    目录前言转 pdf安装 pdfkit 库安装 wkhtmltopdf 文件url 生成 pdf本地 html 文件生成 pdf转 word安装 pypandoc 库安装 pandoc...
    99+
    2022-12-19
    python将html转pdf python将html转word python pdf处理
  • 如何利用Python代码批量将PDF文件转为Word格式
    本篇文章给大家分享的是有关如何利用Python代码批量将PDF文件转为Word格式,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在日常工作或学习中,经常会遇到这样的无奈:“小任...
    99+
    2023-06-17
  • php如何将数组转化为一组变量
    这篇“php如何将数组转化为一组变量”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何将数组转化为一组变量”文章吧。在...
    99+
    2023-06-30
  • python如何将可变项转换为不可变项
    小编给大家分享一下python如何将可变项转换为不可变项,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!将可变项转换为不可变项函数frozenset()用于将可变的...
    99+
    2023-06-27
  • Python如何将数字转化成列表
    小编给大家分享一下Python如何将数字转化成列表,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. digitizedef digitize(n):  return list(ma...
    99+
    2023-06-25
  • javascript如何把变量转换为字符串
    这篇文章主要讲解了“javascript如何把变量转换为字符串”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript如何把变量转换为字符串”吧!...
    99+
    2024-04-02
  • 怎么在php中利用json_encode()将变量转换为JSON数据
    本篇文章为大家展示了怎么在php中利用json_encode()将变量转换为JSON数据,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作