2016-11-09 62 views
1

我不是標準化的名單最頻繁的詞,例如:獲取列表

'one Bull', 'A Horse', 'Horse', 'Dog', 'Black dog', 'Brown dog', 'Bird', 'I'm a horse', 'I'm not a dog' 

我想要得到的是最常見的值的列表,這將是很容易使用SQL如果數據清白的,但具有不歸一化數據,我不知道我怎麼能得到類似的名單如下:

'Dog' - 4 
'Horse' - 3 
'A' - 3 
... 

我已經看到了Python有一個計數器模塊可幫助,但它會將一個字符串計爲一個"One bull",而不是混合字"One", "Bull".

以前可能會拆分字符串嗎?

+1

修改初始列表使用''split''如'x = [y.split()for y in list]',然後將其平坦化,然後「count」。 –

回答

3

您可以分割列表爲單獨的詞項和隱蔽的第一個字母使用str.capitalizecollections.Counter計數前爲大寫:

from collections import Counter 

lst= ['one Bull', 'A Horse', 'Horse', 'Dog', 'Black dog', 'Brown dog', 'Bird', 'I\'m a horse', 'I\'m not a dog'] 
c = Counter(i.capitalize() for x in lst for i in x.split()) 
print(c) 
# Counter({'Dog': 4, 'Horse': 3, 'A': 3, "I'm": 2, 'Black': 1, 'Brown': 1, 'Bull': 1, 'Not': 1, 'One': 1, 'Bird': 1}) 

然後用計數器對象的most_common,讓您的所需數量的最常見的項目:

print(c.most_common(3)) 
# [('Dog', 4), ('Horse', 3), ('A', 3)] 
0

我會寫一些Python代碼來規範化給定列表第一。之後,你可以做一個計數,有很多現有的計數代碼。

另一個嘗試,與我的第一個建議密切相關:確保你知道哪些動物可以出現,並確保你有一個列表,如animals = ['dog', 'horse', 'bird', bull']。現在遍歷animals並計算每隻動物發生的次數。你可能想要在字符串上做一個小寫字母。