gpt4 book ai didi

类内的Python函数递归

转载 作者:太空宇宙 更新时间:2023-11-04 00:07:25 25 4
gpt4 key购买 nike

我制作了以下类(class)。

class Message:

def __init__(self, message):
self.message = message
self.__dict__.update(message)

def dict_value_finder(self, field, partial_match=False):
"""It Takes a dict with nested lists and dicts,
and searches all dicts for a key of the field
provided and return the value(s) as a list.
set partial_match = True to get partial matches.
"""
fields_found = []

for key, value in self.message.items():

if field in key if partial_match else field == key:
fields_found.append(value)
print(key, value)

elif isinstance(value, dict):
results = dict_value_finder(value, field, partial_match)
fields_found.extend(results)

elif isinstance(value, list):
for item in value:
if isinstance(item, dict):
more_results = dict_value_finder(item, field,
partial_match)
fields_found.extend(more_results)

return fields_found

函数 dict_value_finder 将在类之外工作,如下所示:

def dict_value_finder(search_dict, field, partial_match=False):
"""Takes a dict with nested lists and dicts,
and searches all dicts for a key of the field
provided and return the value(s) as a list.
set partial_match = True to get partial matches.
"""
fields_found = []

for key, value in search_dict.items():

if field in key if partial_match else field == key:
fields_found.append(value)
print(key, value)

elif isinstance(value, dict):
results = dict_value_finder(value, field, partial_match)
fields_found.extend(results)

elif isinstance(value, list):
for item in value:
if isinstance(item, dict):
more_results = dict_value_finder(item, field,
partial_match)
fields_found.extend(more_results)

return fields_found

但是当我把它放在类中时,我得到了错误:

  File "<ipython-input-42-76ab838299bc>", line 23, in dict_value_finder
results = dict_value_finder(value, field, partial_match)

NameError: name 'dict_value_finder' is not defined

我不确定如何将此函数添加到需要递归的类中。

最佳答案

results = dict_value_finder(value, field, partial_match) 更改为:

results = self.dict_value_finder(value, field, partial_match)

more_results = dict_value_finder(item, field,partial_match) 到:

more_results = self.dict_value_finder(item, field,partial_match)

为了访问类实例的属性,我们应该使用self

解决评论中的问题:

def dict_value_finder(self, field, partial_match=False, search=None):

fields_found = []

search = search or self.message

for key, value in search.items():

if field in key if partial_match else field == key:
fields_found.append(value)
print(key, value)

elif isinstance(value, dict):
results = self.dict_value_finder(field, partial_match, value)
fields_found.extend(results)

elif isinstance(value, list):
for item in value:
if isinstance(item, dict):
more_results = self.dict_value_finder(field,partial_match, item)
fields_found.extend(more_results)

return fields_found

关于类内的Python函数递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53630875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com