字典与集合题

这篇博客包含了关于字典和集合的编程题目,包括判断题、选择题和编程题。涉及字典的更新、合并,以及通过列表构建字典、统计单词数量、求单词长度、提取不重复字符等操作。同时,还要求解决两数之和的问题,并对字典进行有序合并。

判断题

  • 下面程序的输出是15929494512。
dic1={"赵洁" : 15264771766,"张秀华" : 13063767486,"胡桂珍" : 15146046882,"龚丽丽" : 13606379542,"岳瑜" : 13611987725}
dic2={"王玉兰" : 15619397270,"王强" : 15929494512,"王桂荣" : 13794876998,"邓玉英" : 18890393268,"何小红" : 13292597821}
dic3=dic1.update(dic2)
print(dic3["王强"])

错误,这种情况dic3是none
应该是
dic1.update(dic2)
dic3=dic1

选择题

  • d.items()返回类型
>>> a={3:4,4:3,5:52}
>>> a.items()
dict_items([(3, 4), (4, 3), (5, 52)])
>>> type(a.items())
<class 'dict_items'>

编程题

7-2 通过两个列表构建字典 (10分)
输入两行字符串,以空格为分隔,将每行字符串存储为列表形式。将第一个列表的元素值作为键,将第二个列表中对应顺序的元素作为值,构建一个字典,按键升序排列后输出字典的所有键值对列表。
输入格式:
输入两行字符串,分别以空格为分隔存为列表。
输出格式:
按键的升序,输出字典键值对列表。
输入样例:
学校 城市 邮编
集美大学 厦门 361021
输出样例:
[(‘城市’, ‘厦门’), (‘学校’, ‘集美大学’), (‘邮编’, ‘361021’)]

#1.把两行字符串存储为列表
x1 = input().split(' ')
x2 = input().split(' ')
#2.构建字典
dict1 = {}
for i in range(0,len(x1)):
    dict1[x1[i]] = x2[i]
#3.按键升序排列输出字典的所有键值对列表
dict2 = sorted(dict1.items(),key = lambda dict1:dict1[0]) #如果是dict1[1]是按值排列
print(dict2)

7-4 jmu-Java&Python-统计一段文字中的单词个数并按单词的字母顺序排序后输出 (10分)
现需要统计若干段文字(英文)中的不同单词数量。
如果不同的单词数量不超过10个,则将所有单词输出(按字母顺序),否则输出前10个单词。
注1:单词之间以空格(1个或多个空格)为间隔。
注2:忽略空行或者空格行。
注3:单词大小写敏感,即’word’与’WORD’是两个不同的单词 。 ###输入说明 若干行英文,最后以!!!为结束。
###输出说明 不同单词数量。 然后输出前10个单词(按字母顺序),如果所有单词不超过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
!!!
输出样例
49
Are
Because
Failure
It
a
alert
and
are
as
at

x = input() #输入多行文字直到遇到某个字符
alist=[] #alist是由 每一行是一个字符串 组成的列表
while x != '!!!!!':
    alist.append(x)
    x = input()

blist = [i.split() for i in alist if len(i) != 0] #blist是把alist的每一个元素(字符串)拆除列表 
#注意这里写成i.split(' ')就错了,因为可能有多个空格
clist = []
for x in range(len(blist)):
    clist += blist[x] #clist是由所有单词组成的列表

c_set = set(clist)
print(len(c_set))
list2 = list(c_set)
list3 = sorted(list2) #list3是所有不同单词按照字母顺序排列好了的列表
if len(c_set) <= 10:
    for i in range(len(list3)):
        print(list3[i])
else:
    for i in range(10):
        print(list3[i])

7-5 jmu-python-求单词长度 (10分)
输入n个单词,计算每个单词长度。对单词长度排序,分行输出单词长度及其单词。
输入格式:
行1:单词个数n
分行输入n个单词
输出格式:
分行输出单词长度及其单词。(单词长度,单词)用元组表示
输入样例:
5
python
list
set
996
tuple
输出样例:
(3, ‘996’)
(3, ‘set’)
(4, ‘list’)
(5, ‘tuple’)
(6, ‘python’)

#1输入n个单词
n = eval(input())
a = {}
#2计算单词长度
for i in range(n):
    x = input()
    a[x] = len(x) #不能以长度为键,因为键不能重复
#3按照长度排列
alist = sorted(a.items(),key=lambda a:a[1])
#alist是这样的[('set', 3), ('996', 3), ('list', 4), ('tuple', 5), ('python', 6)]
#4输出元组
print(alist)
for (i,j) in alist: #列表是由元组构成的,可以通过“for (x,y) in”  控制输出元组中的某个数,也可以改变顺序
    print((j,i))

7-6 输出不重复的字符 (10分)
输入一个字符串,把最左边的10个不重复的字符(大小写算不同字符)挑选出来。 如不重复的字符不到10个,则按实际数目输出。
输入格式:
输入一个字符串s。
输出格式:
输出一个字符串,包含字符串s最左边10个不重复的字符。不到10个按实际输出。
输入样例1:
在这里给出一组输入。例如:
Hello world, hello python
输出样例1:
在这里给出相应的输出。例如:
Helo wrd,h
输入样例2:
在这里给出一组输入。例如:
succeed
输出样例2:
在这里给出相应的输出。例如:
suced

x = input()
adict = {}
for i in range(len(x)-1,-1,-1):
    adict[x[i]]=i #把序列从后到前做成字典,用前面键(元素)的值(索引)覆盖后面键的值

alist = sorted(adict.keys(), key = adict.get)#这是一个由字典的键组成,按值排列,的列表

if len(alist) >= 10:
    print(''.join(alist[0:10]))
else:
    print(''.join(alist))

7-3 两数之和 (10分)
给定一组整数,还有一个目标数,在给定这组整数中找到两个数字,使其和为目标数,如找到,解是唯一的。找不到则显示 “no answer”。输出的下标按从小到大排序。用一重循环加字典实现。
输入格式:
在一行中给出这组数。 在下一行输入目标数
输出格式:
在一行中输出这两个数的下标,用一个空格分开。
输入样例1:
在这里给出一组输入。例如:
2,7,11,15
9
输出样例1:
在这里给出相应的输出。例如:
0 1
输入样例2:
在这里给出一组输入。例如:
3,6,9
10
输出样例2:
在这里给出相应的输出。例如:
no answer

nums = list(map(int,input().split(','))) #这样一行就解决了,比输入列表,然后列表解析要快
#x = input().split(',')
#x1 = [eval(i) for i in x]
target = int(input())

hm = dict()
for i in range(len(nums)):
    if nums[i] in hm: #如果列表中有值,在字典里,说明有数可以与它构成目标数
        print(hm[nums[i]], i) #并且字典的值记录了与他构成目标数的索引,这个也保证了索引的顺序是从小到大
        break
    hm[target - nums[i]] = i #把每一个数与目标数的差做出字典,每个数的索引是字典的值
else:
    print("no answer")
#这个方法只用了一次循环

7-7 字典合并 (10分)
字典合并。输入用字符串表示两个字典,输出合并后的字典,字典的键用一个字母或数字表示。注意:1和‘1’是不同的关键字!
输入格式:
在第一行中输入第一个字典字符串 在第二行中输入第二个字典字符串
输出格式:
在一行中输出合并的字典,输出按字典序。"1"的ASCII吗为49,大于1,排序时1在前,"1"在后,其它的也一样。
输入样例1:
在这里给出一组输入。例如:
{1:3,2:5}
{1:5,3:7}
输出样例1:
在这里给出相应的输出。例如:
{1:8,2:5,3:7}
输入样例2:
在这里给出一组输入。例如:
{“1”:3,1:4}
{“a”:5,“1”:6}
输出样例2:
在这里给出相应的输出。例如:
{1:4,“1”:9,“a”:5}

dict1=eval(input().strip()) #这样可以输入字典耶,type是字典
dict2=eval(input().strip())
for i in dict2:
    if i in dict1:
        dict1[i]+=dict2[i]#如果字典2的键在字典1,就把他们加起来
    else:
        dict1[i]=dict2[i] #如果不在,就在字典1里面创建一个这样的键值对
print("{",end='') #输出字典 ,要自己打这个{啊
l=[]
for key,value in sorted(dict1.items(),key=lambda x:ord(x[0])  \
                        if type(x[0])==str else x[0]): #这大概是排序方式吧,如果字典的键是字符串,按键的ASCII码与字典的键是数字的数字比较。ASCII编码可以被看成UTF-8的一部分,Unicode转化成UTF-8编码
    if type(key) ==str:
        l.append('''"'''+str(key)+'''":'''+str(value)) #如果是字符串要自己加双引号
    else:
        l.append(str(key)+":"+str(value))#把这些一整块的东西做成一个字符串放到列表
print(",".join(l),end="")
print("}")
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值