我有一个未规范化的名称列表,例如:
Range Selection Syntax
我想要得到的是一个最常见的值列表,如果数据干净,但没有规范化数据我不知道如何获得类似的列表,这将很容易使用SQL:
'one Bull', 'A Horse', 'Horse', 'Dog', 'Black dog', 'Brown dog', 'Bird', 'I'm a horse', 'I'm not a dog'
我已经看到Python有一个可能有用的Counter模块,但它会将一个String计为一个'Dog' - 4
'Horse' - 3
'A' - 3
...
,而不是单词"One bull"
的混合
可能之前分裂字符串?
答案 0 :(得分:4)
您可以将列表中的项目拆分为单独的字词,然后使用str.capitalize
将第一个字母转换为大写字母,然后使用collections.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)]
答案 1 :(得分:0)
我会写一些Python代码来首先规范化给定列表。之后你可以做一个计数,有很多现有的计数代码。
另一个尝试,与我的第一个建议密切相关:确保您知道哪些动物可以出现,并确保您有一个列表,如animals = ['dog', 'horse', 'bird', bull']
。现在迭代animals
并计算每只动物出现的次数。您可能希望在字符串上执行小写。