dict
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
和list比较,dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
而list相反:
- 查找和插入的时间随着元素的增加而增加;
- 占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。
dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象。
1、字典基本操作
字典内容如下:
dic = {
'python': 95,
'java': 99,
'c': 100
}
用程序解答下面的题目
- 字典的长度是多少
dic = { ‘python’: 95, ‘java’: 99,‘c’: 100}
print ( len (dic))
- 请修改’java’ 这个key对应的value值为98
dic['java']=98
- 删除 c 这个key
del dic['c']
print(dic)
- 增加一个key-value对,key值为 php, value是90
dic['php'] = 90
print(dic)
-
获取所有的key值,存储在列表里
-
获取所有的value值,存储在列表里
list_key = list(dic.keys())
print(listkey)
list_value = list(dic.values())
print(listvalue)
- 判断 javascript 是否在字典中
if 'javascript' in dic:
print('javascript 存在于dic')
else:
print('javascript 不存在于dic')
- 获得字典里所有value 的和
- 获取字典里最大的value
- 获取字典里最小的value
list_value = list(dic.values())
print(sum(list_value))
print(max(list_value))
print(min(list_value))
- 字典 dic1 = {‘php’: 97}, 将dic1的数据更新到dic中
dic_new = {'php': 97}
dic.update(dic_new)
print(dic)
2、字典中的value
有一个字典,保存的是学生各个编程语言的成绩,内容如下
data = {
'python': {'上学期': '90', '下学期': '95'},
'c++': ['95', '96', '97'],
'java': [{'月考':'90', '期中考试': '94', '期末考试': '98'}]
}
各门课程的考试成绩存储方式并不相同,有的用字典,有的用列表,但是分数都是字符串类型,请实现函数transfer_score(score_dict)
,将分数修改成int类型
def transfer_score(data):
for key in data["python"].keys():
data["python"][key] = int(data["python"][key])
for x in range(len(data['c++'])):
data['c++'][x]=int(data['c++'][x])
for y in data["java"][0].keys():
data["java"][0][y] = int(data["java"][0][y])
transfer_score(data)
print(data)
set
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
要创建一个set,需要提供一个list作为输入集合
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:
-
列表[‘A’, ‘B’, ‘A’, ‘B’]去重。
a=['A','B','A','B'] print(set(a))
-
求两个集合{6, 7, 8},{7, 8, 9}中不重复的元素(差集指的是两个集合交集外的部分)
set_1 = {6, 7, 8} set_2 = {7, 8, 9} set_1.difference(set_2)
-
求{‘A’, ‘B’, ‘C’}中元素在 {‘B’, ‘C’, ‘D’}中出现的次数。
set1 = {'A', 'B', 'C'} set2 = {'B', 'C', 'D'} print(len(set1 & set2))