现在需要统计若干段文字(英文)中的单词数量,并且还需统计每个单词出现的次数。
注1:单词之间以空格(1个或多个空格)为间隔。
注2:忽略空行或者空格行。
基本版:
统计时,区分字母大小写,且不删除指定标点符号。
进阶版:
!.,:*?
。 注意:所谓的删除,就是用1个空格替换掉相应字符。若干行英文,最后以!!!!!
为结束。
单词数量
出现次数排名前10的单词(次数按照降序排序,如果次数相同,则按照键值的字母升序排序)及出现次数。
failure is probably the fortification in your pole
it is like a peek your wallet as the thief when you
are thinking how to spend several hard-won lepta
when you are wondering whether new money it has laid
background because of you then at the heart of the
most lax alert and most low awareness and left it
godsend failed
!!!!!
46
the=4
it=3
you=3
and=2
are=2
is=2
most=2
of=2
when=2
your=2
结尾无空行
Failure is probably The fortification in your pole!
It is like a peek your wallet as the thief when You
are thinking how to. spend several hard-won lepta.
when yoU are? wondering whether new money it has laid
background Because of: yOu?, then at the heart of the
Tom say: Who is the best? No one dare to say yes.
most lax alert and! most low awareness and* left it
godsend failed
!!!!!
结尾无空行
54
the=5
is=3
it=3
you=3
and=2
are=2
most=2
of=2
say=2
to=2
结尾无空行
这个题目主要难在sorted的运用,其实我也不是很会用这个,我今天仔细研究了一下这个。
引用一下sorted简单介绍,同样的,我这里也要引用lambda的说明,因为排序也需要lambda的使用,下面为引用:
sorted:
sorted(iterable, key=None, reverse=False)
- iterable -- 可迭代对象。
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
lambda:
lambda arg1,arg2,.....argn:expression
lambda 即匿名函数
ok,那我们就可以来听听我来讲这个了:
那我们先从简单的开始:
lambda:匿名函数,即使引入字符按照表述进行变化,即如果我写一个
f=lambda x:x*(-1)
那么我写的其实就等于:
def f(x):
x=-1*x
那这就很显而易见了。
这个理解之后,我们进行分析sorted:
那我们来分析一下括号里的内容吧:
iterable -- 可迭代对象。即像列表、元祖、字典等这种都可以使用,这个就是与sort的第一个不同,适用范围更大。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。即,我们可以自定义一个函数,然后迭代即按照这个函数值来排序。
reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。即由我们来选择升序or降序排序。
这里我们大概就会有一些自己的想法了:那我们就以这个题目为例,来实践一下吧:
我们先思考我们的迭代对象是什么呢?如果只按照值排序,那就是dict.items()对吧,然后key呢?我们需要用用产生的列表中的元组的第二个值进行排序(即用值排序),那我们补齐试试
sorted(dict.items(), key=lambda item: item[1], reverse=True)
能理解可以跳过这个模块:
我觉得我需要仔细讲一下这个key,第一点,这里是个函数,即我们通过每一项(每一项都是元组)的第二个(即原来字典的值)进行排序
即
lambda i: i[1] #和lambda item: item[1]一样,学懂了吗?
那么下面的,我们接着来吧
然后同理,我们如果用值和键进行排序的话只需要变一下key,key这边需要我们先排序值,再排序键(key=lambda item: (item[1],-item[0])放在前的为首要排序,后为次要),那就这样:
sorted(dict.items(), key=lambda item: (item[1],-item[0]), reverse=True)
既然上面说了,reverse有默认值,那我们可以偷一下懒:
sorted(dict.items(), key=lambda item: (-item[1],item[0]))
那我们就成功解决了lambde和sorted了。大家可以去完成这个题目,来看看自己掌握的怎么样呀!
# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/11/10 17:17
dict1 = {}
sum1 = 0
while True:
str = input()
lis = list(str.lower().split())
if len(lis) == 0:
continue
else:
if "!!!!!" in lis:
break
for i in lis:
for q in "!.,:*?":
i = i.replace(q, '')
if i.lower() in dict1:
dict1[i.lower()] += 1
else:
dict1[i.lower()] = 1
sum1 = len(dict1)
print(sum1)
sum1 = 0
for i in sorted(dict1.items(), key=lambda x: (-x[1], x[0])): #对dict1先用item排序,然后将出来的列表中的每一个元组,用首项正排序,第二项逆排序
if sum1 == 10:
break
print("%s=%s" % (i[0], i[1]))
sum1 += 1