【发布时间】:2018-02-21 05:02:49
【问题描述】:
这是一本字典:
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 对象时超出最大递归深度
如何让它发挥作用?
如果你能提供一个没有递归的解决方案,我也会很高兴得到它。
【问题讨论】:
-
(只需在此处添加答案,因为它似乎只是代码中的错字)-您在第 4 行的递归:
f(d)一遍又一遍地调用相同的函数,而没有更改范围。您将遇到堆栈溢出。我想你的意思是f(d[key]),以便它在子字典上执行f()。 (不争辩这是一个离题/不好的问题) -
@DanilSperansky:这个问题缺乏明确的问题陈述; 你添加了错误信息。在那之前,这个问题是题外话。如果您想讨论关闭后的工作原理,可以通过Meta Stack Overflow 进行讨论。
-
@DanilSperansky:How soon should I "vote to close"?:总是投票立即关闭。
标签: python dictionary recursion