问题描述
这是这篇文章的后续问题: How to recursively create a nested dictionary of unknown size in python?
我还需要以某种方式为每个元素合并一个值。
def unpack(obj):
return {str(o): unpack(o) for o in obj.get_items()}
除了名称之外,每个项目还有一个与之关联的值。 我尝试了以下方法,但不起作用:
def unpack(obj):
return {{str(o): unpack(o),'value':o.value} for o in obj.get_items()}
我收到“不可哈希类型:'dict'”错误。 生成的字典应如下所示:
example_dict = {'level_1': {'level_2':{},'value':'b'},'value' : 'a'}
解决方法
好的,如果我理解正确的话,您想将对象树放入分层字典中。我的第一次尝试是
import random
names = ['foo_%s'%i for i in range(10)]
# Make hierarchical test case
class Test:
def __init__(self,depth):
self.name = random.choice(names)
if depth > 1:
self.child = Test(depth-1)
else:
self.child = None
def __str__(self):
return self.name
test = Test(3)
# The meat
def unpack(x):
ret = dict()
for k,v in x.__dict__.items():
try:
ret[k] = unpack(v)
except AttributeError:
ret[k] = v
return ret
print(unpack(test))
‘unpack’尝试递归地找到一个对象的所有变量并将它们写入一个字典。如果失败,则返回变量。请注意,'x.str' 必须被实现。