九、字典
练习题
1、字典基本操作
字典内容如下:
dic = {
'python': 95,
'java': 99,
'c': 100
}
用程序解答下面的题目
字典的长度是多少
dic = {
'python': 95,
'java': 99,
'c': 100
}
len(dic) #3
请修改’java’ 这个key对应的value值为98
dic["java"] = 98
dic #{'python': 95, 'java': 98, 'c': 100}
删除 c 这个key
dic.pop("c")
dic #{'python': 95, 'java': 98}
增加一个key-value对,key值为 php, value是90
dic.update({"php":90})
dic #{'python': 95, 'java': 98, 'php': 90}
获取所有的key值,存储在列表里
a = dic.keys() #type(a)返回 dict_keys
key_lst = list(a)
print(key_lst,type(key_lst)) #['python', 'java', 'php'] <class 'list'>
获取所有的value值,存储在列表里
b = dic.values() #type(a)返回 dict_keys
value_lst = list(b)
print(value_lst,type(value_lst))
#[95, 98, 90] <class 'list'>
判断 javascript 是否在字典中
dic.get("javascript")#没有返回值
但是python就是有返回值的
dic.get("python")
#95
def check_key(key_name,dictname):
for one in dictname:
if key_name in dictname:#或dic.keys()
print('key在字典中!')
break
else:
print('key不在字典中!')
break
check_key("javascript",dic)
#key不在字典中!
#没有break会输出三遍
获得字典里所有value 的和
print(sum(val_lst)) #283
获取字典里最大的value
print(sorted(val_lst,reverse=True)[0]) #98
获取字典里最小的value
print(sorted(val_lst,reverse=False)[0]) #90
字典 dic1 = {‘php’: 97}, 将dic1的数据更新到dic中
dic1 = {'php': 97}
dic.update(dic1)
print(dic) #{'python': 95, 'java': 98, 'php': 97}
2、字典中的value
有一个字典,保存的是学生各个编程语言的成绩,内容如下
data = {
'python': {'上学期': '90', '下学期': '95'},
'c++': ['95', '96', '97'],
'java': [{'月考':'90', '期中考试': '94', '期末考试': '98'}]
}
各门课程的考试成绩存储方式并不相同,有的用字典,有的用列表,但是分数都是字符串类型,请实现函数transfer_score(score_dict),将分数修改成int类型
def transfer_score(data):
# your code here
参考这个:参考
示例代码
import pprint
def transfer_score(data):
# 如果data是字典
if isinstance(data, dict):
for key, value in data.items():
data[key] = transfer_score(value)
return data
# 如果data 是列表
if isinstance(data, list):
data_lst = []
for item in data:
data_lst.append(transfer_score(item))
return data_lst
if isinstance(data, str):
return int(data)
if __name__ == '__main__':
data = {
'python': {'上学期': '90', '下学期': '95'},
'c++': ['95', '96', '97'],
'java': [{'月考': '90', '期中考试': '94', '期末考试': '98'}]
}
data = transfer_score(data)
pprint.pprint(data)
十、集合
练习题
怎么表示只包含⼀个数字1的元组。
a = (1,)
a #(1,)
a=(1)不行
创建一个空集合,增加 {‘x’,‘y’,‘z’} 三个元素。
miffy = set()
miffy.add('apple')
miffy.add('carrot')
miffy.add('wucidici')
miffy #{'apple', 'carrot', 'wucidici'}
列表[‘A’, ‘B’, ‘A’, ‘B’]去重。
d = ['A','B','A','B']
D = set(d)
d = list(D)
print(d) #['B', 'A']
当然也能用教程里的循环,不过我比较懒
求两个集合{6, 7, 8},{7, 8, 9}中不重复的元素(差集指的是两个集合交集外的部分)。
s1 = {6, 7, 8}
s2 = {7, 8, 9}
s1-s2#{6}
这里为什么返回的是6,迷惑
s1 = {6, 7, 8}
s2 = {7, 8, 9}
c = s1.difference(s2)
c#{6}
求{‘A’, ‘B’, ‘C’}中元素在 {‘B’, ‘C’, ‘D’}中出现的次数。
十一、序列
练习题
求列表 [2,3,4,5] 中每个元素的立方根
b = [2,3,4,5]
a = [i**(1/3) for i in b ]
a
"""
[1.2599210498948732,
1.4422495703074083,
1.5874010519681994,
1.7099759466766968]
"""
想用map的,但是还没想好怎么用,先空着
将[‘x’,‘y’,‘z’] 和 [1,2,3] 转成 [(‘x’,1),(‘y’,2),(‘z’,3)] 的形式
l1=['x', 'y', 'z']
l2=[1,2,3]
l3=zip(l1,l2)
print(type(l3), l3,list(l3))
#<class 'zip'> <zip object at 0x0000027B9B550B48> [('x', 1), ('y', 2), ('z', 3)]