簡體   English   中英

Python,帶字典,並生成包含(單詞> 1,最常用的單詞,最長的單詞)的列表

[英]Python, Take dictionary, and produce list with (words>1, most common words, longest words)

所以我做了一個功能

def word_count(string):
    my_string = string.lower().split()
    my_dict = {}
    for item in my_string:
        if item in my_dict:
            my_dict[item] += 1
        else:
            my_dict[item] = 1
    print(my_dict)

因此,這樣做是將一個字符串取下來,將其拆分,然后生成一個字典,其中的鍵是單詞,值是它出現的次數。

好的,所以我現在想做的就是制作一個函數,該函數接收該函數的輸出,並以以下格式生成列表:

((長於1個字母的單詞列表),(最常見的單詞列表),(最長的單詞列表))

同樣,例如,假設兩個單詞出現了3次,並且兩個單詞的長度均為6個字母,則應在(最頻繁)列表和(最長長度)列表中同時包含兩個單詞。

因此,到目前為止,這是我嘗試解決此問題的嘗試

def analyze(x):
    longer_than_one= []
    most_frequent= []
    longest= []
    for key in x.item:
        if len(key) >1:
            key.append(longer_than_one)
    print(longer_than_one)

所以我在這里試圖做的是一系列的for和if循環,根據項目是否符合條件附加到列表中,但是我遇到了以下問題:

1-如何遍歷字典而不會出錯?

2-我想不出一種方法來計算最常用的單詞(我當時想添加最高值的鍵)

3-我想不出一種方法來僅追加詞典中最長的單詞(我當時想使用len(key),但它表示錯誤)

如果有幫助,請使用Python 3.5.1在Anaconda的Spyder中運行,任何提示將不勝感激!

您確實是在嘗試重新發明輪子。

假設您有list_of_words ,這是一個字符串列表。

要獲得最常用的單詞,請使用Counter

from collections import Counter
my_counter = Counter(list_of_words)

要按長度對列表進行排序:

sorted_by_length = sorted(list_of_words, key=len)

要獲得長於一個字母的單詞列表,您可以簡單地使用排序列表,或僅使用以下列表創建新列表:

longer_than_one_letter = [word for word in list_of_words if len(word) > 1]

要獲得所需格式的輸出,只需使用以上所有內容。

當您使用Counter時,大多數問題都可以解決或變得更容易。

用一個Counterword_count

>>> from collections import Counter
>>> def word_count(string):
...     return Counter(string.split())

演示:

>>> c = word_count('aa aa aa xxx xxx xxx b b ccccccc')
>>> c
Counter({'aa': 3, 'xxx': 3, 'b': 2, 'ccccccc': 1})
>>> c['aa']
3

Countermost_common方法有助於獲取最常用的單詞:

>>> c.most_common()
[('aa', 3), ('xxx', 3), ('b', 2), ('ccccccc', 1)]
>>> c.most_common(1)
[('aa', 3)]
>>> max_count = c.most_common(1)[0][1]
>>> [word for word, count in c.items() if count == max_count]
['aa', 'xxx']

您可以使用c.keys()獲取單詞本身

>>> c.keys()
['aa', 'xxx', 'b', 'ccccccc']

以及這樣最長的單詞列表:

>>> max_len = len(max(c, key=len))
>>> [word for word in c if len(word) == max_len]
['ccccccc']

1)要遍歷字典,您可以使用:

for key in my_dict:

或者,如果您想同時獲取鍵和值,請使用:

for key, value in my_dict.iteritems():

2)要查找最常用的單詞,您必須假設第一個單詞最常用,然后查看下一個單詞的使用計數,如果與之相同,則將其附加到列表中,如果較少,則跳過它,如果更多,則清除-清除您列出並假設此頻率最高

3)與2大致相同。假設您的第一個是最長的比較(如果下一個比較),如果長度等於您當前的最大值,則僅追加到列表中;如果跳過的次數較少,則更清楚您的列表並假設這是您的最高

我沒有添加任何代碼,因為最好是自己編寫以學習一些東西,

您的問題還有其他不錯的答案,但是,我想為您提供幫助,我對您的代碼進行了一些修改,以使其正常運行-

def analyze(x):
        longer_than_one= []
        most_frequent= []
        longest= []
        for key in x:
            if len(key) >1:
                longer_than_one.append(key)
        print(longer_than_one)

看來您沒有嘗試第二種和第三種用例。

首先,檢查collections.Counter

import collections

word_counts = collections.Counter(your_text.split())

鑒於此,您可以將其.most_common方法用於最常用的單詞。 它產生一個(單詞,its_count)元組的列表。

要發現字典中最長的單詞,您可以執行以下操作:

import heapq

largest_words= heapq.nlargest(N, word_counts, key=len)

N是您想要的最大單詞數。 之所以可行,是因為默認情況下,對dict的迭代僅生成鍵,因此它將根據單詞長度( key=len )對它們進行排序,並且僅返回N個最大的鍵。

但是,您似乎不了解本教程而已深入Python。 是功課嗎?

暫無
暫無

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

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