如何将嵌套的Python字典转换为对象?

2024-02-21

我正在寻找一种优雅的方法来使用带有一些嵌套字典和列表(即javascript样式对象语法)的字典上的属性访问来获取数据。

例如:

>>> d = {'a': 1, 'b': {'c': 2}, 'd': ["hi", {'foo': "bar"}]}

应该可以通过这种方式访问​​:

>>> x = dict2obj(d)
>>> x.a
1
>>> x.b.c
2
>>> x.d[1].foo
bar

我认为,如果没有递归,这是不可能的,但是获取字典对象样式的好方法是什么?


Update:在 Python 2.6 及更高版本中,请考虑是否namedtuple https://docs.python.org/2/library/collections.html#collections.namedtuple数据结构适合您的需求:

>>> from collections import namedtuple
>>> MyStruct = namedtuple('MyStruct', 'a b d')
>>> s = MyStruct(a=1, b={'c': 2}, d=['hi'])
>>> s
MyStruct(a=1, b={'c': 2}, d=['hi'])
>>> s.a
1
>>> s.b
{'c': 2}
>>> s.c
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'MyStruct' object has no attribute 'c'
>>> s.d
['hi']

替代方案(原始答案内容)是:

class Struct:
    def __init__(self, **entries):
        self.__dict__.update(entries)

然后,您可以使用:

>>> args = {'a': 1, 'b': 2}
>>> s = Struct(**args)
>>> s
<__main__.Struct instance at 0x01D6A738>
>>> s.a
1
>>> s.b
2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将嵌套的Python字典转换为对象? 的相关文章

随机推荐

  • 如何更改 powershell 脚本中哈希表列的标题

    我对 Powershell 脚本编写相当陌生 我正在编写一个 power shell 脚本 其中声明了一个哈希表 如下所示 a 1 b 2 my hash my hash Add a b 当我在 Powershell 中打印该表时 哈希表的
  • 在 Task.WhenAll 中执行多个任务时的 C# 线程

    如果在单个线程上执行以下操作 会发生什么 await Task WhenAll items select x gt SomeAsyncMethod x Where SomeAsyncMethod is defined like this w
  • 如果没有 EnableWebMvc,RequestMapping 如何工作?

    I see RequestMapping无需注释即可工作 EnableWebMvc在 Java 配置类级别 这看起来像 EnableWebMvc不再需要 谁能让我理解这里的流程 这是我的工作example显示简单的jsp页面使用弹簧4 1v
  • SLF4J错误:类加载器具有不同类型的类对象

    试图找出为什么我在 tomcat 日志中收到以下错误 Caused by java lang LinkageError loader constraint violation when resolving method org slf4j
  • Java堆中的constantPoolClass?

    我继承了一个 Java 小程序 一个实际的 它在运行大约 4 天后抛出 OutOfMemory 异常 小程序的性质使得人们确实会长时间打开它 运行近两天后 jmap histo 将顶部堆消费者显示为 num instances bytes
  • Numpy 二维移动平均线

    我有一个二维 numpy 数组 我想取每个条目最近的 n 个条目的平均值 就像在一维数组上取滑动平均值一样 最干净的方法是什么 这与应用类似的概念filter to an image 幸运的是 scipy ndimage filters h
  • 奇怪的 HttpClient 结果

    当尝试从 Hitbox API 获取数据时 我得到了一个奇怪的结果 对于一个 API 的命令 这种情况每次都会发生 而对于另一个 API 的命令 这种情况只是有时发生 结果或多或少是这样的 这是我得到的最后结果 u001f b 0 0 0
  • HTML5画布覆盖透明渐变

    我正在 HTML5 中创建一个颜色选择器 如下面的渐变 它由三个要素组成 纯红色背景色 必须可变 从下到上黑 透明渐变 从左到右白色透明渐变 我已经成功创建了单个渐变和单个颜色 但我不知道如何将纯色和两个渐变叠加在一起 我怎样才能做到这一点
  • 如何在两者之间建立一个具有拉取请求的公共/私有 git 存储库 [重复]

    这个问题在这里已经有答案了 我在 github 上有一个公共存储库 我组的每个用户都有一个它的分支 该政策是禁止直接提交到主存储库 所有更改都必须作为来自分叉的拉取请求进来 以便在合并到主存储库之前可以对其进行审查 鉴于有时我们开发的代码必
  • 在实体框架中映射选择存储过程

    我的场景 我将 Visual Studio 2010 与 Entity Framework 4 1 结合使用 我有一个包含许多表和许多存储过程的旧数据库 我正在使用 MVC 3 编写 ASP NET C 程序 我采用了使用 ADO NET
  • Scala - “for-yield”子句在某些条件下可以不产生任何结果吗?

    在 Scala 语言中 我想编写一个函数 在给定范围内生成奇数 该函数在迭代偶数时打印一些日志 该函数的第一个版本是 def getOdds N Int Traversable Int val list new mutable Mutabl
  • python group by 和 count() 多列

    我有一个像这样的数据框 Country A B C UK 1 0 1 US 1 1 1 GB 0 1 1 UK 1 1 1 US 0 1 1 GB 0 1 1 我需要按国家 地区分组并计算值为 1 的所有列 我坚持为所有列设置列 1 的条件
  • Android 按下了数组中的哪个按钮索引

    如何设置 OnClickListener 来简单地告诉我按下了按钮数组中的哪个索引按钮 我可以使用数组更改这些按钮的文本和颜色 我这样设置它们 TButton 1 Button findViewById R id Button01 TBut
  • Xcode——查找项目中的死方法

    我很好奇是否有任何工具可以为此提供部分解决方案 由于performSelector 这是一个棘手的问题 但工具至少应该能够找出候选者 使人类的工作变得更容易 由于 Objective C 的动态特性 使用静态分析不可能检测已定义但未使用的函
  • make 未对 g++ 使用 -std=c++11 选项

    我正在尝试使用 make 编译 C 文件 但是 默认情况下它不使用 std c 11 标志 每当我需要编译使用 c 11 特定功能的程序时 我都必须使用 g 显式编译它 所以 我想问如何让我的系统上的所有 c 文件自动使用选项 std c
  • 在 Angular 2 中激活路由*之前*解析值

    只要承诺尚未解决 我就想阻止访问路线 另外 我想将该承诺的返回值传递给路由组件 Several https stackoverflow com questions 36260780 angular 2 resolve root compon
  • PHP ssh2_exec 通道退出状态?

    好的 所以 pecl ssh2 应该是 libssh2 的包装器 libssh2 具有 libssh2 channel get exit status 有什么方法可以获取这些信息吗 I NEED STDOUT STDERR 退出状态 我得到
  • 对于 Rails,如何访问或打印配置变量(作为实验或测试/调试)

    例如 在config environments production rb在 Rails 3 应用程序中 有 config serve static assets false 和许多变数 如何将它们作为一个整体全部打印出来 也许在一个对象中
  • 空单元格的数据表默认渲染函数

    我想为我拥有的所有数据表中的所有空单元格定义默认值 但我不想为每一列都这样做 example dataTable ajaxSource sources deep txt columns data engine render function
  • 如何将嵌套的Python字典转换为对象?

    我正在寻找一种优雅的方法来使用带有一些嵌套字典和列表 即javascript样式对象语法 的字典上的属性访问来获取数据 例如 gt gt gt d a 1 b c 2 d hi foo bar 应该可以通过这种方式访问 gt gt gt x