通过getattr动态获取dict元素?

2024-04-29

我想动态查询我想要检索的类中的哪些对象。getattr似乎是我想要的,并且它对于类中的顶级对象表现良好。但是,我还想指定子元素。

class MyObj(object):
    def __init__(self):
        self.d = {'a':1, 'b':2}
        self.c = 3

myobj = MyObj()
val = getattr(myobj, "c")
print val # Correctly prints 3
val = getattr(myobj, "d['a']") # Seemingly incorrectly formatted query
print val # Throws an AttributeError

如何通过字符串获取对象的字典元素?


您收到错误的原因是getattr(myobj, "d['a']")查找名为的属性d['a']物体上,却没有一个。你的属性被命名为d这是一本字典。一旦你查阅了字典,then您可以访问其中的项目。

mydict = getattr(myobj, "d")
val    = mydict["a"]

或者正如其他人所示,您可以将其合并为一个步骤(我将其显示为两个步骤,以更好地说明实际发生的情况):

val = getattr(myobj, "d")["a"]

您的问题意味着您认为对象中字典的项目是该对象的“子元素”。然而,字典中的项目与对象的属性不同。 (getattr()不适用于类似的东西o.a不过,要么;它只是获取一个对象的一个​​属性。如果那也是一个对象并且你想得到其中一个its属性,那是另一个getattr().)

您可以非常轻松地编写一个函数,该函数遍历属性路径(以字符串形式给出)并尝试将每个名称解析为字典键或属性:

def resolve(obj, attrspec):
    for attr in attrspec.split("."):
        try:
            obj = obj[attr]
        except (TypeError, KeyError):
            obj = getattr(obj, attr)
    return obj

这里的基本思想是,您采用一条路径,并针对该路径的每个组成部分,尝试查找类似字典的容器中的项目或对象上的属性。当你到达路径的尽头时,归还你所拥有的东西。你的例子是resolve(myobj, "d.a")

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过getattr动态获取dict元素? 的相关文章

  • 分配列表的多个值

    我很想知道是否有一种 Pythonic 方式将列表中的值分配给元素 为了更清楚 我要求这样的事情 myList 3 5 7 2 a b c d something myList So that a 3 b 5 c 7 d 2 我正在寻找比手
  • 为什么 pandas 在简单的数学运算上比 numpy 更快?

    最近 我观察到 pandas 的乘法速度更快 我在下面的例子中向您展示了这一点 如此简单的操作怎么可能做到这一点 这怎么可能呢 pandas 数据帧中的底层数据容器是 numpy 数组 测量 我使用形状为 10k 10k 的数组 数据框 i
  • 绝对导入不起作用,但相对导入起作用

    这是我的应用程序结构 foodo setup py foodo init py foodo py models py foodo foodo foodo py从导入类models py module from foodo models im
  • 计算熊猫数据帧几个月的总和

    我有一个 pandas 数据框 如下所示 ID Year R1 R1 f KAR1 20201001 1 5 KAR1 20201101 2 6 KAR1 20201201 3 7 KAR1 20210101 4 8 KAR1 202102
  • 在 PhotoImage 下调整图像大小

    我需要调整图像大小 但我想避免使用 PIL 因为我无法使其在 OS X 下工作 不要问我为什么 无论如何 因为我对 gif pgm ppm 感到满意 所以 PhotoImage 类对我来说没问题 photoImg PhotoImage fi
  • 样本()和r样本()有什么区别?

    当我从 PyTorch 中的发行版中采样时 两者sample and rsample似乎给出了类似的结果 import torch seaborn as sns x torch distributions Normal torch tens
  • 打印一份拥有多个家庭的人员名单,每个家庭都有多个电话号码

    我有一类 Person 它可以有多个 Home 每个 Home 都有一个或多个电话号码 我已经定义了类 但现在我正在尝试创建一个视图 其中列出每个人的所有家庭以及每个家庭地址的所有电话号码 类似于 john smith 123 fake s
  • Django Web 应用程序中的 SMTP 问题

    我被要求向使用 Django Python 框架实现的现有程序添加一个功能 此功能将允许用户单击一个按钮 该按钮将显示一个小对话框 表单以输入值 我确实编写了一些代码 显示电子邮件已发送的消息 但实际上 它没有发送 My code from
  • Bokeh 中单独的节点和边缘悬停工具?

    我正在尝试为 Bokeh 中的节点和边缘获取单独的悬停工具提示 但未能使其正常工作 有人可以指出我做错了什么吗 我相信代码应该如下所示 from bokeh io import show output notebook from bokeh
  • Django 1.7 应用程序配置导入错误:没有名为 appname.apps 的模块

    我正在尝试按照以下文档为我的一个名为 文章 的 Django 应用程序设置自定义应用程序配置https docs djangoproject com en dev ref applications https docs djangoproj
  • 导入目录下的所有模块

    有没有办法导入当前目录中的所有模块 并返回它们的列表 例如 对于包含以下内容的目录 mod py mod2 py mod3 py 它会给你
  • Python 或 C 语言中的 Matlab / Octave bwdist()

    有谁知道 Matlab Octave bwdist 函数的 Python 替代品 此函数返回给定矩阵的每个单元格到最近的非零单元格的欧几里得距离 我看到了一个 Octave C 实现 一个纯 Matlab 实现 我想知道是否有人必须用 AN
  • 如何在 Python 中跟踪日志文件?

    我想在 Python 中提供 tail F 或类似内容的输出 而无需阻塞或锁定 我找到了一些非常旧的代码来做到这一点here http code activestate com recipes 436477 filetailpy 但我认为现
  • 无法将matplotlib安装到pycharm

    我最近开始使用Python速成课程学习Python编程 我陷入困境 因为我无法让 matplotlib 在 pycharm 中工作 我已经安装了pip 我已经通过命令提示符使用 pip 安装了 matplotlib 现在 当我打开 pych
  • 重定向 python 交互式帮助()

    我正在为使用 Qt 的应用程序开发交互式 python shell 但是我似乎无法获得重定向的交互式帮助 我的 python 代码中有这个 class OutputCatcher def init self self data def wr
  • 使用 Sphinx 时,如何记录没有文档字符串的成员?

    我正在为我发布的包编写文档 我发现您的文档越全面 人们就越容易找到您的包来使用 废话 实际上 我在充满爱心地编写代码的所有功能和细节方面获得了很多乐趣 然而 我对如何为类级变量编写与 Sphinx 兼容的文档感到完全困惑 特别是 我有一些e
  • 在不同的 GPU 上同时训练多个 keras/tensorflow 模型

    我想在 Jupyter Notebook 中同时在多个 GPU 上训练多个模型 我正在使用 4GPU 的节点上工作 我想将一个 GPU 分配给一个模型并同时训练 4 个不同的模型 现在 我通过 例如 为一台笔记本选择 GPU import
  • 为什么我的 PyGame 应用程序根本不运行?

    我有一个简单的 Pygame 程序 usr bin env python import pygame from pygame locals import pygame init win pygame display set mode 400
  • PYTHON:从 txt 文件中删除 POS 标签

    我有以下 txt 文件 其中包含 POS 词性 http en wikipedia org wiki Part of speech tagging 每个单词的标签 不用 jj到 说 vb 我 ppss是 bedz愤怒 jj在 在 dt无与伦
  • 用 Beautiful Soup 进行抓取:为什么 get_text 方法不返回该元素的文本?

    最近我一直在用 python 开发一个项目 其中涉及抓取一些网站的一些代理 我遇到的问题是 当我尝试抓取某个知名代理站点时 当我要求 Beautiful Soup 查找 IP 在代理表中的位置时 它并没有按照我的预期执行操作 我将尝试查找每

随机推荐

  • 用顶点之间的渐变填充 matplotlib 多边形

    我正在使用 matplotlib 的 Poly3DCollection 绘制多边形 三角形 的集合 三角形位于具有与其关联的颜色的顶点之间 我目前正在用通过平均三个顶点的颜色确定的纯色填充每个三角形 绘制三角形以形成 3D 表面网格 I w
  • 在snakemake规则中使用pyenv

    我正在使用 Snakemake 来实现一个漫长而复杂的管道 其中涉及一些外部编写的 python2 脚本 当我尝试使用 pyenv 指定 python2 时 pyenv shell命令失败 同时pyenv global and pyenv
  • 如何编译Python 1.0

    出于某种反常的原因 我想尝试Python 1 0 我将如何编译它 或者更确切地说 可以使用当前编译器干净地编译的早期版本是什么 我使用的是 Mac OS X 10 5 不过因为这只是出于好奇 关于语言如何变化 所以在 Linux 虚拟机中编
  • Angular 无法注册 ServiceWorker:获取脚本时收到错误的 HTTP 响应代码 (404)

    我正在使用 Firebase 在 Angular PWA 中执行推送通知 并且我正在点击链接来执行此操作 https medium com tariqueejaz progressive web app push notifications
  • 如何检查nodejs中的服务器和端口是否可用?

    我有一个项目是用 Nodejs 编写的 我需要知道如何检查带有端口的 IP 是否可以连接 前任 检查 example1 com 443 gt true 检查 example1 com 8080 gt false Thanks 了解服务器 端
  • Bash 函数中的返回值

    我正在使用 bash 脚本 我想执行一个函数来打印返回值 function fun1 return 34 function fun2 local res fun1 echo res 当我执行时fun2 它不打印 34 为什么会这样呢 虽然
  • 绝对定位但调整父级的大小

    我正在尝试编写一个 div 中包含 2 个 div 的 html 代码 有一个没有宽度和高度的父div 宽度是浏览器宽度 没有指定高度 我想要在这个父 div 内有 2 个 div 第一个需要具有宽度或 250px 第二个需要具有屏幕宽度的
  • 从 len 18000 的 Dask 数据帧中采样 n= 2000 会生成错误 当“replace=False”时,无法获取比总体更大的样本

    我有一个从 csv 文件创建的 dask 数据框 len daskdf 返回 18000 但当我ddSample daskdf sample 2000 我收到错误 ValueError Cannot take a larger sample
  • 将命令行参数传递给可运行的 JAR [重复]

    这个问题在这里已经有答案了 我从 Eclipse 项目构建了一个可运行的 JAR 用于处理给定的 XML 文件并提取纯文本 但是 此版本要求将该文件硬编码在代码中 有没有办法做这样的事情 java jar wiki2txt enwiki 2
  • Apache NiFi 替换文本处理器以使用控制字符作为分隔符

    在将固定宽度文件转换为用普通字符 如 分隔时使用替换文本处理器 作为分隔符正在起作用 然而 考虑 u0001 或 A 或 A 并不能按预期工作 使用您可以使用的特殊字符literal unescapeXmlnifi表达函数 literal
  • 如何将 JavaScript 数组转换为特定的对象列表

    我有一个像这样的数组 empName Sushant departments HR DEV empName Prashant departments HR MNGT 我想把这个数组转换成 Sushant HR Prashant HR Sus
  • React 有传递 props 的简写吗?

    我厌倦了一直这样做
  • RxJava 相当于 orElse 是什么

    在其他语言的流 函数域中有一个常见的操作 那就是 orElse 它就像一个 if 当当前链没有得到任何结果时 它会更改为备用链 在具有 Maybe 类型的语言中 它基本上会继续 Some 类型的链或更改为 None 类型的 orElse 理
  • 添加样式后如何重置回默认CSS?

    基本上 我通过添加如下样式类来更改 javafx 中文本字段的 css textfield getStyleClass add textfieldstyle 但后来我希望能够将其恢复到原来的样子 但由于本例中的原始外观是 JavaFX 的默
  • Xcode 6 找不到 cocoapods 库

    我正在尝试构建一个使用 CocoaPods 的 Xcode 5 项目 POD 文件如下 target MyProjectName do pod AFNetworking 2 2 1 pod SVProgressHUD 0 9 pod MDH
  • 出现致命错误 Uncaught CurlException: 26: 无法打开文件

    我正在尝试使用 PHP 的 GD 库创建朋友的动态图像 并且需要将其上传到我的朋友个人资料中 但我不断收到错误消息 致命错误 未捕获的 CurlException 26 无法打开第 820 行 home p170r760 public ht
  • “不能从静态上下文引用非静态方法”JPA Java

    我从这一行收到 无法从静态上下文引用非静态方法 错误 createStudent stu00001 new Date 631152000000 m WB new Type Name Bob Smith 如何正确组成 日期 我查看了 API
  • 虚拟类作为 Spirit 的 AST 节点

    我当时正在和一个朋友一起开发一种语言的解释器 我们从一个我猜想不太明智的决定开始 我们首先制作所有用于执行的元素 实际上是由不同类组成的树 但现在看着 boost 的例子 我对如何合并两者感到很困惑 我知道从什么开始 语法 我知道要达到什么
  • ImportError:尝试在没有已知父包的情况下进行相对导入[重复]

    这个问题在这里已经有答案了 我正在学习使用 python 编程 并且在从包中的模块导入时遇到问题 我正在使用 Visual Studio 代码和 Python 3 8 2 64 位 我的项目目录 https i stack imgur co
  • 通过getattr动态获取dict元素?

    我想动态查询我想要检索的类中的哪些对象 getattr似乎是我想要的 并且它对于类中的顶级对象表现良好 但是 我还想指定子元素 class MyObj object def init self self d a 1 b 2 self c 3