您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 通过getattr动态获取dict元素?

5b51 2022/1/14 8:21:22 python 字数 3478 阅读 456 来源 www.jb51.cc/python

我想动态查询我想要检索的类中的哪些对象. getattr看起来像我想要的,它对类中的顶级对象执行得很好.但是,我还想指定子元素.class MyObj(object): def __init__(self): self.d = {'a':1, 'b':2} self.c = 3 myobj = MyObj() val

概述

我想动态查询我想要检索的类中的哪些对象. 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

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

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

或者正如其他人所示,你可以在一步中将它结合起来(我把它显示为两个以更好地说明实际发生的事情):

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

您的问题暗示您认为对象中字典的项是对象的“子元素”.但是,字典中的项与对象的属性不同. (getattr()也不会像o.a那样工作;但是它只获取一个对象的一个??属性.如果那也是一个对象而你想得到它的一个属性,那就是另一个getattr().)

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

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

这里的基本思想是你采用一个路径,并且对于路径的每个组件,尝试在类似字典的容器中找到一个项目或者在一个对象上找到一个属性.当你到达路径的尽头时,返回你所拥有的.你的例子将是解决(myobj,“d.a”)

总结

以上是编程之家为你收集整理的python – 通过getattr动态获取dict元素?全部内容,希望文章能够帮你解决python – 通过getattr动态获取dict元素?所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶