目录
字典翻转输出
描述
读入一个字典类型的字符串,反转其中键值对输出。
即,读入字典key:value模式,输出value:key模式。
输入格式
用户输入的字典格式的字符串,如果输入不正确,提示:输入错误。
输出格式
给定字典d,按照print(d)方式输出
输入输出示例
输入 | 输出 | |
示例 | {"a": 1, "b": 2} | {1: 'a', 2: 'b'} |
ori_dic = eval(input())
dic={}
if(not isinstance(ori_dic,dict)):
print('输入错误')
else:
for item in ori_dic.keys():
dic[ori_dic.get(item)]=item
print(dic)
eval()
返回传入字符串的表达式的结果,即将字符串当成有效的表达式进行计算
dict.get(key, default=None)
返回指定键的值,如果值不在字典中返回default值
dict.keys()
以列表返回一个字典所有的键(key)
ps:python中的非运算为not(而非!),不等于仍为!=
《沉默的羔羊》之最多单词
描述
附件是《沉默的羔羊》中文版内容,请读入内容,分词后输出长度大于2且最多的单词。
如果存在多个单词出现频率一致,请输出按照Unicode排序后最大的单词。
输入格式
文件
输出格式
字符串
输入输出示例
仅提供一个输出示范样例。
输入 | 输出 | |
示例 1 | 无 | 羔羊 |
import jieba
txt = open("沉默的羔羊.txt",encoding="utf-8").read()
words = jieba.lcut(txt)
counts = {}
for word in words:
if len(word) <=2:
continue
else:
counts[word]= counts.get(word,0)+1
res=sorted(counts.items(),key=lambda x:x[1],reverse=True )
print(res[0][0])
open()
函数用于创建或打开指定文件
jieba库中的lcut()
精确模式,将句子最精确地切开,适合文本分析
sorted(iterable, cmp=None, key=None, reverse=False)
iterable:可迭代对象
cmp:比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0
key:主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序
reverse:排序规则,reverse = True 降序 , reverse = False 升序(默认)
# lambda表达式的x,y分别对应列表中每个元组中的第一项和第二项
>>> L=[('b',2),('a',1),('c',3),('d',4)]
>>> sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) # 利用cmp函数
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
# lambda表达式的x即列表中每个元组中的第一项
>>> sorted(L, key=lambda x:x[1]) # 利用key
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
人名最多数统计
描述
编程模板中给出了一个字符串,其中包含了含有重复的人名,请直接输出出现最多的人名。
s = '''双儿 洪七公 赵敏 赵敏 逍遥子 鳌拜 殷天正 金轮法王 乔峰 杨过 洪七公 郭靖
杨逍 鳌拜 殷天正 段誉 杨逍 慕容复 阿紫 慕容复 郭芙 乔峰 令狐冲 郭芙
金轮法王 小龙女 杨过 慕容复 梅超风 李莫愁 洪七公 张无忌 梅超风 杨逍
鳌拜 岳不群 黄药师 黄蓉 段誉 金轮法王 忽必烈 忽必烈 张三丰 乔峰 乔峰
阿紫 乔峰 金轮法王 袁冠南 张无忌 郭襄 黄蓉 李莫愁 赵敏 赵敏 郭芙 张三丰
乔峰 赵敏 梅超风 双儿 鳌拜 陈家洛 袁冠南 郭芙 郭芙 杨逍 赵敏 金轮法王
忽必烈 慕容复 张三丰 赵敏 杨逍 令狐冲 黄药师 袁冠南 杨逍 完颜洪烈 殷天正
李莫愁 阿紫 逍遥子 乔峰 逍遥子 完颜洪烈 郭芙 杨逍 张无忌 杨过 慕容复
逍遥子 虚竹 双儿 乔峰 郭芙 黄蓉 李莫愁 陈家洛 杨过 忽必烈 鳌拜 王语嫣
洪七公 韦小宝 阿朱 梅超风 段誉 岳灵珊 完颜洪烈 乔峰 段誉 杨过 杨过 慕容复
黄蓉 杨过 阿紫 杨逍 张三丰 张三丰 赵敏 张三丰 杨逍 黄蓉 金轮法王 郭襄
张三丰 令狐冲 赵敏 郭芙 韦小宝 黄药师 阿紫 韦小宝 金轮法王 杨逍 令狐冲 阿紫
洪七公 袁冠南 双儿 郭靖 鳌拜 谢逊 阿紫 郭襄 梅超风 张无忌 段誉 忽必烈
完颜洪烈 双儿 逍遥子 谢逊 完颜洪烈 殷天正 金轮法王 张三丰 双儿 郭襄 阿朱
郭襄 双儿 李莫愁 郭襄 忽必烈 金轮法王 张无忌 鳌拜 忽必烈 郭襄 令狐冲
谢逊 梅超风 殷天正 段誉 袁冠南 张三丰 王语嫣 阿紫 谢逊 杨过 郭靖 黄蓉
双儿 灭绝师太 段誉 张无忌 陈家洛 黄蓉 鳌拜 黄药师 逍遥子 忽必烈 赵敏
逍遥子 完颜洪烈 金轮法王 双儿 鳌拜 洪七公 郭芙 郭襄 赵敏'''
s=s.split()
counts={}
for name in s:
counts[name]=counts.get(name,0)+1
res=sorted(counts.items(),key=lambda x:x[1],reverse=True)
print(res[0][0])
习题
1.重复元素判定。编写一个函数,接受列表作为参数,如果一个元素在列表中出现了不止一次,则返回True,但不要改变原来列表的值。同时编写调用这个函数和测试结果的程序:
def hasRep(ls):
for item in ls:
if ls.count(item) >= 2:
return True
return False
data = eval(input())
print(hasRep(data))
list.count(obj):统计某个元素在列表中出现的次数
2.重复元素判定续。利用集合的无重复性改编程题1,获得一个更快更简洁的版本。
def hasRep_Set(ls):
temp = set(ls)
if len(temp) != len(ls):
return True
else:
return False
data = eval(input())
print(hasRep_Set(data))
set(iterable):返回新的集合对象(转化为集合)
3.《红楼梦》人物统计。编写程序统计《红楼梦》中前5位出场最多的人物
import jieba
excludes = {'什么', '一个', '我们', '你们', '如今', '说道', '知道', '起来', '这里','奶奶',
'姑娘', '出来', '众人', '那里', '自己', '他们', '一面', '只见', '怎么','老太太',
'两个', '没有', '不是', '不知', '这个', '听见', '这样', '进来', '咱们','太太',
'告诉', '就是', '东西', '回来', '只是', '大家', '只得', '丫头','姐姐','不用',
'过来', '心里', '如此', '今日', '这些', '不敢', '出去', '所以', '不过', '的话',
'不好', '一时', '不能', '银子', '几个', '答应', '二人', '还有', '只管', '这么',
'说话', '一回', '那边', '这话', '外头', '打发', '自然', '今儿', '罢了', '屋里',
'那些', '听说', '如何', '问道', '看见','二爷','小丫头','人家','妹妹','老爷'}
txt = open ("红楼梦.txt","r",encoding="UTF-8").read()
words = jieba.lcut(txt)
counts = {}
for word in words:
if len(word) == 1:
continue
elif word == "宝玉" or word == "宝二爷":
rword = "贾宝玉"
elif word == "凤姐" or word == "凤辣子" or word == "凤姐儿" or word == "琏二奶奶" or word == "凤丫头" or word == "凤哥儿":
rword = "王熙凤"
elif word == "老祖宗" or word == "老太君":
rword = "贾母"
elif word == "颦颦" or word == "林姑娘" or word == "黛玉" or word == "林妹妹" or word == "潇湘妃子" or word == "林丫头":
rword = "林黛玉"
elif word == "宝姑娘" or word == "宝丫头" or word == "蘅芜君" or word == "宝姐姐" or word == "宝钗":
rword = "薛宝钗"
elif word == "湘云":
rword = "史湘云"
elif word == "存周":
rword = "贾政"
elif word == "花珍珠" or word == "花大姑娘":
rword = "袭人"
else:
rword = word
counts[rword] = counts.get(rword, 0) + 1
for word in excludes:
del counts[word]
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)
for i in range(5):
word, count = items[i]
print ("{0:{2}<10}{1:{2}>5}".format(word, count,chr(12288)))
print ("{0:{2}<10}{1:{2}>5}".format(word, count,chr(12288)))
{0}和{1}分别代表format内需要被格式化的变量,{0}代表word,{1}代表count
<10表示左对齐,并占10个位置,>5表示右对齐,占5个位置
在PyCharm中引入jieba