2016-11-09 60 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并计算每只动物发生的次数。你可能想要在字符串上做一个小写字母。