英文:
See if value exists in Python nested dict which contains dicts, lists, and strings
问题
我不确定是否有一些库可以处理这个问题,或者递归是正确的方法。我正在尝试编写一个递归函数,当我调用它时,它总是返回False
。任何帮助都会受到欢迎。
item
最初是一个字典。
text
是要匹配的字符串。
def match(item, text):
if item == text:
return True
if type(item) == list:
for i in item:
match(i, text)
if type(item) == dict:
for i in item.values():
match(i, text)
return False
我不太理解如何让它继续进行,例如当列表的第一个项目不匹配时。
英文:
I'm not sure if there is some library that handles this, or if recursion is the way to go. I am trying to write a recursion function, when I call it it always ends up returning False
. Any help appreciated.
item
starts out as a dict.
text
is a string to match.
def match(item, text):
if item == text:
return True
if type(item) == list:
for i in item:
match(i, text)
if type(item) == dict:
for i in item.values():
match(i text)
return False
I'm not quite grasping how to have it keep going when say the first item of a list is not a match.
答案1
得分: 4
当递归调用找到匹配时,您没有返回 True
。
def match(item, text):
if item == text:
return True
if isinstance(item, (list, tuple)):
return any(match(i, text) for i in item)
if isinstance(item, dict):
return any(match(i, text) for i in item.values())
return False
您还应该使用 isinstance()
进行类型检查,以允许子类。
英文:
You're not returning True
when the recursive call finds a match.
def match(item, text):
if item == text:
return True
if isinstance(item, (list, tuple)):
return any(match(i, text) for i in item)
if isinstance(item, dict):
return any(match(i, text) for i in item.values())
return False
You should also use isinstance()
for type checks, to allow for subclasses.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论