如何将此重复代码转换为函数

2024-05-16 01:11:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些重复的代码。我试图检查句子列表中的每个句子是否在开头包含某个单词。如果没有,我希望它做一些事情,然后在字典中打印这些值。否则,我想让它做些别的事情,然后再打印另一本字典

但是我不知道如何将重复的代码转换成函数,因为我需要在重复代码的第一个循环的开头添加一个变量

以下是我目前的代码:

if not audio_keyword_dictionary:
    for index, sentence in enumerate(sentences):
        keyword_set_inside_dict = set()
        for each_keyword in complete_keyword_list:
            if each_keyword in sentence:
                keyword_set_inside_dict.add(each_keyword)
                keyword_dict[sentence] = keyword_set_inside_dict

    for key, value in keyword_dict.items():
        print(f'{value} - {key}\n')

else:
    for index, sentence in enumerate(sentences):
        keyword_set_inside_dict = set()
        for each_keyword in complete_keyword_list:
            if each_keyword in sentence:
                keyword_set_inside_dict.add(each_keyword)
                keyword_dict[sentence] = keyword_set_inside_dict

                for each_value in audio_keyword_dictionary.values():
                    if each_value in sentences[index - 1] and sentences[index - 1] != '':
                        audio_nested_dictionary[each_value] = keyword_dict

    for k, v in audio_nested_dictionary.items():
        for key, value in v.items():
            print(f'{k} - {value} {key}\n')

以下是我创建的函数:

def iterate_sentences(sentences, keyword_list):
    keyword_dict = dict()
    for index, sentence in enumerate(sentences):
        keyword_list_inside_dict = list()
        for each_keyword in complete_keyword_list:
            if each_keyword in sentence:
                keyword_list_inside_dict.append(each_keyword)
                keyword_set = set(keyword_list_inside_dict)
                keyword_dict[sentence] = keyword_set

    return keyword_dict

Bu如果我需要重复部分之外的“索引”,我如何使用它

在本部分中,准确地说,在重复部分结束之后:

                for each_value in audio_keyword_dictionary.values():
                    if each_value in sentences[index - 1] and sentences[index - 1] != '':
                        audio_nested_dictionary[each_value] = keyword_dict

不确定是否需要说,但句子是一个遵循模式的句子列表。它以一个包含audio{positive_number_here}的字符串开始,然后是另一个具有实际意义的字符串,然后是另一个audio{positive_number_here + 1}等等,在这两个字符串之间交替使用。列表以一个有意义的字符串结尾


Tags: inforindexdictionaryifvaluesentencesaudio
2条回答

有两种选择:

  1. 创建一个类并将函数添加到该类中。这样,您就可以设置self.index,并在以后引用它
class SentenceManager:
    def iterate_sentences(self, sentences, keyword_list):
        keyword_dict = dict()
        for index, sentence in enumerate(sentences):
            self.index = index # set index

            keyword_list_inside_dict = list()
            for each_keyword in complete_keyword_list:
                if each_keyword in sentence:
                    keyword_list_inside_dict.append(each_keyword)
                    keyword_set = set(keyword_list_inside_dict)
                    keyword_dict[sentence] = keyword_set

        return keyword_dict

manager = SentenceManager(...)
manager.interate_sentences()

  1. 从函数返回一个元组,有关如何使用它,请参见下文
def iterate_sentences(sentences, keyword_list):
    keyword_dict = dict()
    for index, sentence in enumerate(sentences):
        keyword_list_inside_dict = list()
        for each_keyword in complete_keyword_list:
            if each_keyword in sentence:
                keyword_list_inside_dict.append(each_keyword)
                keyword_set = set(keyword_list_inside_dict)
                keyword_dict[sentence] = keyword_set

    return keyword_dict, index # return a tuple as (keyword_dict, index)

keyword_dict, index = iterate_sentences(...) # consume tuple

您不需要函数来消除重复。只需移动if语句

for index, sentence in enumerate(sentences):
    keyword_set_inside_dict = set()
    for each_keyword in complete_keyword_list:
        if each_keyword in sentence:
            keyword_set_inside_dict.add(each_keyword)
            keyword_dict[sentence] = keyword_set_inside_dict

            if audio_keyword_dictionary:
                for each_value in audio_keyword_dictionary.values():
                    if each_value in sentences[index - 1] and sentences[index - 1] != '':
                        audio_nested_dictionary[each_value] = keyword_dict

if audio_keyword_dictionary:
    for k, v in audio_nested_dictionary.items():
        for key, value in v.items():
            print(f'{k} - {value} {key}\n')
else:
    for key, value in keyword_dict.items():
        print(f'{value} - {key}\n')

相关问题 更多 >