Tim*_*m B 3 python dictionary nested bunch
我正在使用一个返回嵌套字典的包。当其他所有内容都使用对象语法时,使用字典语法访问我的类方法中的此返回对象会感到很尴尬。搜索使我进入了大包/新捆绑包,这似乎实现了我的追求。我也看到过建议使用namedtuples的方法,但是这些方法不容易支持嵌套属性,大多数解决方案都依赖于使用namedtuple中的字典进行嵌套。
什么是实现这一目标的更自然的方式?
data = {'a': 'aval', 'b': {'b1':{'b2a':{'b3a':'b3aval','b3b':'b3bval'},'b2b':'b2bval'}} }
print(data['b']['b1']['b2a']['b3b']) # dictionary access
# print(data.b.b1.b2a.b3b) # desired access
import neobunch
data1 = neobunch.bunchify(data)
print(data1.b.b1.b2a.b3b)
Run Code Online (Sandbox Code Playgroud)
以下课程可让您做自己想做的事情:
class AttrDict(dict):
""" Dictionary subclass whose entries can be accessed by attributes
(as well as normally).
"""
def __init__(self, *args, **kwargs):
super(AttrDict, self).__init__(*args, **kwargs)
self.__dict__ = self
@staticmethod
def from_nested_dict(data):
""" Construct nested AttrDicts from nested dictionaries. """
if not isinstance(data, dict):
return data
else:
return AttrDict({key: AttrDict.from_nested_dict(data[key])
for key in data})
data = {
"a": "aval",
"b": {
"b1": {
"b2b": "b2bval",
"b2a": {
"b3a": "b3aval",
"b3b": "b3bval"
}
}
}
}
data1 = AttrDict.from_nested_dict(data)
print(data1.b.b1.b2a.b3b) # -> b3bval
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2145 次 |
最近记录: |