프로그래밍 언어/Python

중첩 된 Python dict를 객체로 변환 하는 방법

Rateye 2021. 12. 9. 10:42
728x90
반응형
질문 : 중첩 된 Python 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

재귀 없이는 불가능하다고 생각하지만 dicts에 대한 객체 스타일을 얻는 좋은 방법은 무엇입니까?

답변

업데이트 : 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
출처 : https://stackoverflow.com/questions/1305532/convert-nested-python-dict-to-object
728x90
반응형