我这里有一个函数,如果检测到词典字典(总是会发生这种情况),它将返回自身。我知道目前为止,我的函数一直运行到出现错误并达到递归深度限制为止。如果有k != numero
,谁能知道我如何正确地从字典中弹出或删除某项。我曾尝试在else语句中从my_dict弹出k,但这会产生AttributeError,表明字符串不具备该功能。我通过pycharm调试器运行了代码,它将'four'
显示为k
,将'five'
显示为v。这两个都是字符串,但是它们在字典中都存在键/值,所以我很困惑。
这是我的代码。
my_dict = {'one': {'two': 'three', 'four': 'five', 'six': 'seven'}}
k = ''
numero = 'six'
def find_location(d):
global key
for k, v in d.iteritems():
if isinstance(v, dict):
key = find_location(v)
elif k == numero:
print v
print k
else:
return find_location(d)
答案 0 :(得分:1)
通过使用del
命令而不是pop
,我设法获得了您描述的结果。这是我运行的脚本,需要进行一些修改,因为我使用的是python3。
my_dict = {'one': {'two': 'three', 'four': 'five', 'six': 'seven'}}
k = ''
numero = 'six'
def find_location(d):
global key
for k, v in d.items():
if isinstance(v, dict):
key = find_location(v)
elif k == numero:
print(v)
print(k)
else:
print('Deleting ' + str(k) + ':' + str(d[k]))
del d[k]
print(d)
return find_location(d)
print(d)
find_location(my_dict)
让我知道它如何为您运行。
------更新
如果我正确理解,我认为我在您的代码中发现了问题。当您要递归调用函数时,必须使用return
命令来执行,而在key = find_location(v)
中则不需要。下面的代码有效。
my_dict = {'one': {'two': 'three', 'four': 'five', 'six': 'seven'}}
k = ''
numero = 'six'
def find_location(d):
global key
for k, v in d.items():
if isinstance(v, dict):
return find_location(v)
elif k == numero:
print(v)
print(k)
k = 'your-assigned-value'
print(k)
return k
else:
print('Deleting ' + str(k) + ':' + str(d[k]))
del d[k]
return find_location(d)
return k
result = find_location(my_dict)
print('result = ' + str(result))
如果不使用return
,Python会自动使函数return
的结果等于null。希望这会有所帮助。