[英]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
時,大多數問題都可以解決或變得更容易。
用一個Counter
寫word_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
Counter
的most_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.