这里是一个字典:
data = {
'a': {
'b': {
'c': {
'd': {
'e': {
'f': 1,
'g': 50,
'h': [1, 2, 4],
'i': 3,
'j': [7, 9, 6],
'k': [
[('x', 'abc')],
[('y', 'qwe')],
[('z', 'zxc')]
]
}
}
}
}
}
}
我的目标是查找并将值转换为字典(如果可能):
data = {
'a': {
'b': {
'c': {
'd': {
'e': {
'f': 1,
'g': 50,
'h': [1, 2, 4],
'i': 3,
'j': [7, 9, 6],
'k': [{
'x': 'abc'
}, {
'y': 'qwe'
}, {
'z': 'zxc'
}]
}
}
}
}
}
}
我认为可以使用递归来实现,我甚至写了一个,但是它不起作用。
def f(d):
for key, value in d.iteritems():
if type(d[key]) is dict:
f(d)
try:
d[key] = dict(d[key])
except:
if type(d[key]) is list:
for i in d[key]:
try:
d[key][i] = dict(d[key][i])
except:
pass
return d
错误信息:
如何解决该错误?RecursionError: 调用 Python 对象时超出了最大递归深度
如果您能提供一个不需要递归的解决方案,我也将不胜感激。
f(d)
一遍又一遍地调用相同的函数,而参数没有任何变化。这将导致堆栈溢出。我想你的意思是f(d[key])
,这样它就可以在子字典上执行f()
。 (并不是争论这是一个离题/糟糕的问题) - user955340