簡體   English   中英

如何有效地簡化代碼?

[英]How can I simplify my code in an efficient way?

因此,目前我的工作分配問題是,分配問題為:定義print_most_frequent()函數,該函數傳遞了兩個參數,一個包含單詞及其對應頻率(在文本字符串中出現的次數)的字典,例如,

{"fish":9,  "parrot":8,  "frog":9,  "cat":9,  "stork":1,  "dog":4, "bat":9,  "rat":4}

整數,即字典中要考慮的關鍵字的長度。

該函數打印關鍵字長度,后跟“字母關鍵字:”,然后打印所需長度的所有字典關鍵字的排序列表,這些關鍵字的出現頻率最高,其次是頻率。 例如,以下代碼:

word_frequencies = {"fish":9,  "parrot":8,  "frog":9,  "cat":9,  "stork":1,  "dog":4, "bat":9,  "rat":4}

print_most_frequent(word_frequencies,3)   
print_most_frequent(word_frequencies,4)
print_most_frequent(word_frequencies,5)
print_most_frequent(word_frequencies,6)
print_most_frequent(word_frequencies, 7) 

打印以下內容:

3 letter keywords: ['bat', 'cat'] 9
4 letter keywords: ['fish', 'frog'] 9
5 letter keywords: ['stork'] 1
6 letter keywords: ['parrot'] 8
7 letter keywords: [] 0

我已經編碼以獲得上述答案,但是這表明我錯了。 也許它需要簡化,但是我在努力。 有人可以幫忙謝謝你。

def print_most_frequent(words_dict, word_len):
    word_list = []
    freq_list = []
    for word,freq in words_dict.items():
        if len(word) == word_len:
            word_list += [word]
            freq_list += [freq]
    new_list1 = []
    new_list2 = []
    if word_list == [] and freq_list == []:
        new_list1 += []
        new_list2 += [0]
        return print(new_list1, max(new_list2))
    else:
        maximum_value = max(freq_list)
        for i in range(len(freq_list)):
            if freq_list[i] == maximum_value:
                new_list1 += [word_list[i]]
                new_list2 += [freq_list[i]]
                new_list1.sort()
        return print(new_list1, max(new_list2))

您可以使用:

def print_most_frequent(words_dict, word_len):
    max_freq = 0
    words = list()
    for word, frequency in words_dict.items():
        if len(word) == word_len:
            if frequency > max_freq:
                max_freq = frequency
                words = [word]
            elif frequency == max_freq:
                words.append(word)
    print("{} letter keywords:".format(word_len), sorted(words), max_freq)

它僅在單詞字典上進行迭代,僅考慮長度為所需單詞的單詞,並構建最常用單詞的列表,並在發現頻率更高時立即對其進行重置。

一種方法是將值映射為鍵,反之亦然,這樣便可以輕松獲得最常用的單詞:

a = {"fish":9,  "parrot":8,  "frog":9,  "cat":9,  "stork":1,  "dog":4, "bat":9,  "rat":4}

getfunc = lambda x, dct: [i for i in dct if dct[i] == x]
new_dict = { k : getfunc(k, a) for k in a.values() }

print (new_dict)

輸出:

{8: ['parrot'], 1: ['stork'], 4: ['rat', 'dog'], 9: ['bat', 'fish', 'frog', 'cat']}

所以,現在如果您想要9位數字的單詞,只需說

b = new_dict[9]
print (b, len(b))

這將給:

['cat', 'fish', 'bat', 'frog'] 4

您可以使用字典,而不必反復調用該函數。 當您只循環一次頻率時,這會更快,但是如果您仍然需要一個函數,則可以只做一個線性lambda:

print_most_frequent = lambda freq, x: print (freq[x])

print_most_frequent(new_dict, 9)
print_most_frequent(new_dict, 4)

這使:

['fish', 'bat', 'frog', 'cat']
['rat', 'dog']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM