当前位置: 首页 > 面试题库 >

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

慕永年
2023-03-14
问题内容

我正在寻找一种优雅的方式来获取数据,该数据使用具有一些嵌套dict和列表(例如javascript样式对象语法)的dict进行属性访问。

例如:

>>> 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

我认为,没有递归是不可能的,但是获得字典对象样式的一种好方法是什么?


问题答案:

更新:在Python 2.6及更高版本中,请考虑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


 类似资料:
  • 本文向大家介绍Python-将嵌套字典列表转换为Pandas Dataframe,包括了Python-将嵌套字典列表转换为Pandas Dataframe的使用技巧和注意事项,需要的朋友参考一下 python很多时候会从各种来源接收数据,这些数据可以采用不同的格式,例如csv,JSON等,可以转换为python列表或字典等。但是要使用诸如pandas之类的包应用计算或分析,我们需要将此数据转换为一

  • 问题内容: 我有一个嵌套列表,如何将其转换为字典 字典应阅读以下内容 我试图将其更改为Pandas DataFrame并将其转换为字典。但是我正在寻找从列表到字典的直接转换 将感谢您的帮助。在Python 3中期待答案 问题答案: 一种方法是使用,它依次遍历每个列表的第 i 个元素: 按照@Jean-FrançoisFabre的建议,通过打开包,可确保您的值是列表。 结果 另一种方法是使用:

  • 问题内容: 我正在尝试将数据从简单的对象图转换为字典。我不需要类型信息或方法,也不需要能够再次将其转换回对象。 我发现了有关从对象的字段创建字典的问题,但它不是递归执行的。 对于python来说相对较新,我担心我的解决方案可能很丑陋,或者是非Python的,或者以某种晦涩的方式破坏了,或者仅仅是普通的NIH。 我的第一次尝试似乎一直有效,直到我使用列表和字典对其进行尝试为止,并且似乎更容易的是仅检

  • 问题内容: 我有一个包含四列的。我想将此DataFrame转换为python字典。我希望第一列的元素为,同一行中其他列的元素为。 数据框: 输出应如下所示: 字典: 问题答案: 该方法将列名设置为字典键,因此你需要稍微调整DataFrame的形状。将“ ID”列设置为索引,然后转置是实现此目的的一种方法。 还接受一个“东方”参数,你需要该参数才能为每列输出值列表。否则,将为每一列返回形式的字典。

  • 问题内容: l = [“a”, “b”, “c”, “d”, “e”] 我想将此列表转换为字典,例如: 因此,基本上,偶数将是关键,而赔率将是值。我知道我可以使用“非Python”方式(例如使用if语句的for循环)来完成此操作,但我相信应该有一种“ Python”方式来完成此任务。因此,感谢您的帮助:) 问题答案: 使用通常的石斑鱼食谱,您可以执行以下操作: Python 2: Python 3

  • 问题内容: 相当于R中的命名列表的自然Python是字典,但是RPy2给您一个ListVector对象。 此时,a是ListVector对象。 我想拥有的东西可以像普通的Python字典一样对待。我的临时解决方法是: 因此,问题是…是否有更好的方法或我应该使用的RPy2内置方法? 问题答案: 我认为让ar向量进入a并不一定要如此,这是怎么回事: 当然,如果您不介意使用,它甚至更容易。结果将具有,而