본문 바로가기
Python/Python FAQ

Python 파이썬의 중첩된 딕셔너리를 객체로 변환하는 방법은 무엇인가요?, How to convert a nested Python dict to object?

by 베타코드 2023. 8. 2.
반응형

질문


I'm searching for an elegant way to get data using attribute access on a dict with some nested dicts and lists (i.e. javascript-style object syntax).

For example:

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

Should be accessible in this way:

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

I think, this is not possible without recursion, but what would be a nice way to get an object style for 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
반응형

댓글