Python 中将嵌套字典转换为对象
Python 中将嵌套字典转换为对象:
- 在类的 __init__ 方法中迭代字典的项目。
- 如果键有一个 dict 类型的值,则用该值实例化类。
- 否则,将键设置为值。
class Struct:
def __init__(self, **kwargs):
for key, value in kwargs.items():
if isinstance(value, dict):
self.__dict__[key] = Struct(**value)
else:
self.__dict__[key] = value
my_dict = {
'name': 'zadmei',
'address': {
'country': 'Country A',
'city': 'City A',
'codes': [1, 2, 3]
},
}
obj = Struct(**my_dict)
print(obj.address.country) # ?️ Country A
print(obj.address.codes) # ?️ [1, 2, 3]
print(obj.name) # ?️ zadmei
obj.address.greet = 'hello world'
print(obj.address.greet) # ?️ hello world
Struct 类采用关键字参数并使用对象上的 __dict__ 属性将嵌套字典转换为对象。
__dict__ 属性返回包含对象的属性和值的字典。
我们使用 dict.items() 方法迭代字典的项目。
dict.items 方法返回字典项((键,值)对)的新视图。
my_dict = {'id': 1, 'name': 'ZadmeiFql'}
print(my_dict.items()) # ?️ dict_items([('id', 1), ('name', 'ZadmeiFql')])
在每次迭代中,我们检查当前键是否指向字典,如果是,我们递归地将字典传递给 Struct 类。
class Struct:
def __init__(self, **kwargs):
for key, value in kwargs.items():
if isinstance(value, dict):
self.__dict__[key] = Struct(**value)
else:
self.__dict__[key] = value
my_dict = {
'name': 'zadmeifql',
'address': {
'country': 'Country A',
'city': 'City A',
'codes': [1, 2, 3]
},
}
obj = Struct(**my_dict)
print(obj.address.country) # ?️ Country A
print(obj.address.codes) # ?️ [1, 2, 3]
如果键不指向嵌套字典,我们将其添加到 __dict__ 属性。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。