下面的代码应该以下列格式返回TEXT字符串中最常用的字母:
每次我使用相同的字符串运行代码,例如“一个”结果循环通过字母......奇怪的是,只有第三次尝试(在这个“一个”例子中)。
text=input('Insert String: ')
def mwl(text):
from string import punctuation
from collections import Counter
for l in punctuation:
if l in text:
text = text.replace(l,'')
text = text.lower()
text=''.join(text.split())
text= sorted(text)
collist=Counter(text).most_common(1)
print(collist[0][0])
mwl(text)
答案 0 :(得分:10)
Counter
使用字典:
>>> Counter('one')
Counter({'e': 1, 'o': 1, 'n': 1})
字典不是有序的,因此是行为。
答案 1 :(得分:3)
您可以使用OrderedDict
替换以下两行来获得所需的输出:
text= sorted(text)
collist=Counter(text).most_common(1)
使用:
collist = OrderedDict([(i,text.count(i)) for i in text])
collist = sorted(collist.items(), key=lambda x:x[1], reverse=True)
您还需要为此导入OrderedDict
。
演示:
>>> from collections import Counter, OrderedDict
>>> text = 'One'
>>> collist = OrderedDict([(i,text.count(i)) for i in text])
>>> print(sorted(collist.items(), key=lambda x:x[1], reverse=True)[0][0])
O
>>> print(sorted(collist.items(), key=lambda x:x[1], reverse=True)[0][0])
O # it will always return O
>>> text = 'hello'
>>> collist = OrderedDict([(i,text.count(i)) for i in text])
>>> print(sorted(collist.items(), key=lambda x:x[1], reverse=True)[0][0])
l # l returned because it is most frequent
答案 2 :(得分:1)
这也可以在没有Counter
或OrderedDict
:
In [1]: s = 'Find the most common letter in THIS sentence!'
In [2]: letters = [letter.lower() for letter in s if letter.isalpha()]
In [3]: max(set(letters), key=letters.count)
Out[3]: 'e'