返回python中最频繁出现的前n个字符及其各自的计数
如何返回前n个最常出现的字符及其各自的计数#例如返回python中最频繁出现的前n个字符及其各自的计数,python,Python,如何返回前n个最常出现的字符及其各自的计数#例如'aaaaaa bbbbccc',2在python中应返回[('a',6),('b',4)] 我试过这个 def top_chars(input, n): list1=list(input) list3=[] list2=[] list4=[] set1=set(list1) list2=list(set1) def count(item): count=0 f
'aaaaaa bbbbccc'
,2
在python中应返回[('a',6),('b',4)]
我试过这个
def top_chars(input, n):
list1=list(input)
list3=[]
list2=[]
list4=[]
set1=set(list1)
list2=list(set1)
def count(item):
count=0
for x in input:
if x in input:
count+=item.count(x)
list3.append(count)
return count
list2.sort(key=count)
list3.sort()
list4=list(zip(list2,list3))
list4.reverse()
list4.sort(key=lambda list4: ((list4[1]),(list4[0])), reverse=True)
return list4[0:n]
pass
但它不适用于输入(“aabc”,2)
它应该给出的输出是
[('a', 2), ('b', 1)]
但我得到的结果是
[('a', 2), ('c', 1)]
使用集合。计数器();它有一个
最常见的()
方法,它可以实现这一点:
>>> from collections import Counter
>>> counts = Counter('aaaaaabbbbcccc')
>>> counts.most_common(2)
[('a', 6), ('c', 4)]
请注意,对于上述输入和aabc
中的b
和c
都具有相同的计数,并且都可以是有效的顶级竞争者。因为您和计数器
都是按计数排序,然后按相反键,c
在b
之前排序
如果不是反向排序,而是使用负计数作为排序键,则应在c
之前再次排序b
:
list4.sort(key=lambda v: (-v[1], v[0))
不是计数器。大多数常用的()实际上是在你要的物品少于计数器中的钥匙时使用排序;它使用a而不是只获取前N个项目。使用
collections.Counter()
;它有一个最常见的()
方法,它可以实现这一点:
>>> from collections import Counter
>>> counts = Counter('aaaaaabbbbcccc')
>>> counts.most_common(2)
[('a', 6), ('c', 4)]
请注意,对于上述输入和aabc
中的b
和c
都具有相同的计数,并且都可以是有效的顶级竞争者。因为您和计数器
都是按计数排序,然后按相反键,c
在b
之前排序
如果不是反向排序,而是使用负计数作为排序键,则应在c
之前再次排序b
:
list4.sort(key=lambda v: (-v[1], v[0))
不是计数器。大多数常用的()实际上是在你要的物品少于计数器中的钥匙时使用排序;它使用a而不是只获取前N个项目。稍微难一点,但也可以:
text = "abbbaaaa"
dict = {}
for lines in text:
for char in lines:
dict[char] = dict.get(char, 0) + 1
print dict
稍微努力一点,但也有效:
text = "abbbaaaa"
dict = {}
for lines in text:
for char in lines:
dict[char] = dict.get(char, 0) + 1
print dict
您的第一个样本中有六个
a
字符,而不是五个。您的第一个样本中有六个a
字符,而不是五个。我这样做了,但仍然得到相同的o/p。你可以检查链接是否有错误details@RiteshBhat:当您要求前2项时,您永远不会得到3项作为输出。相反,在打成平局的情况下,你可以从打成平局的位置按需要获得尽可能多的键,以满足你的前N个请求,顺序相反。哦,是的,我理解你所说的和“list4.sort(key=lambda v:(-v[1],v[0])”工作很好,感谢用户界面这么做,但我仍然得到相同的o/p。U可以检查链接details@RiteshBhat:当你要求前2名时,你永远不会得到3个项目作为输出。相反,在平局的情况下,你从平局的位置获得所需数量的钥匙,以满足你的前N名要求,顺序相反。哦,是的,我理解你说的,并且“list4.sort(key=lambda v:(-v[1],v[0])”很好地工作了,谢谢uBut使用这个我将得到一个dict,它的值和键需要压缩以形成一个列表。我认为这也是一个很好的选择:)谢谢btwSorry,你能更好地解释“被压缩”吗,我不完全理解。我的意思是说,通过使用list(zip(dict_值,dict_键))我可以将(键、值)的组合作为一个列表。但是使用这个,我会得到一个dict,它的值和键需要压缩以形成一个列表。我认为这也是一个不错的选择:)谢谢你,对不起,你能更好地解释“被压缩”吗?我不完全理解。我的意思是说,通过做列表(zip(dict_值、dict_键))我可以将(键、值)的组合作为列表。