사전의 값을 객체속성처럼 접근하는 방법 – Python

파이썬의 사전은 키-값쌍의 형태로 데이터를 구분하여 저장할 수 있고, 사전의 값이 될 수 있는 타입은 제약이 없기 때문에 중첩된 형태의 사전을 만드는 것도 가능하다. 만약 사전의 모든 키가 문자열이라면 사전을 JSON 데이터로 변환할 수 있다.

JSON은 자바스크립트에서, 자바스크립트 객체로 바로 변환할 수 있다. 따라서 자바스크립트에서는 root.somekey.nestedkey와 같은 식으로 객체 속성으로 접근해서 특정 위치의 값을 액세스하는 것이 가능하다는 말이다. 이에 반해 파이썬에서 JSON은 사전으로 파싱되고, 같은 데이터에 접근하기 위해서는 root[‘somekey’][‘nestedkey’] 와 같은 식으로 접근해야 한다.

이것을 자바스크립트에서처럼 root.somekey.nestedkey와 같이 액세스하기 위해서 간단한 래퍼 클래스를 하나 작성했다. 여기에 JSON과 호환되는 사전을 던져주면 객체처럼 . 문법을 써서 하위 속성을 액세스할 수 있다.

#!/usr/local/bin/python
#-*-coding:utf-8
#filename:softDict.py
'''
softDict
copyright 2013. All right reserved to sooop.
'''
class SoftDict:
'''
Make data in dict to access object's property convention.
'''
def __init__(self, user_dict):
self._user_dict = user_dict
self._parse()
def _parse(self):
for key in self._user_dict.iterkeys():
value = self._user_dict[key]
if type(value) == dict:
value = SoftDict(value)
setattr(self, key, value)
def main():
a = { "meta":{"name":"a", "msg":"OK"},"res":"google"}
b = SoftDict(a)
print b.meta.msg
if __name__ == '__main__':
main()

view raw
softDict.py
hosted with ❤ by GitHub