本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql
字典
序列和字典的区别
序列是以连续的整数为索引
字典以"关键字"为索引,关键字可以是任意不可变类型,通常用字符串 或数值。
-----------字典是唯一的映射类型
什么叫可变类型
在计算机科学中,数据类型分为两种:可变类型(Mutable)和不可变类型(Immutable)。
可变类型指的是在创建后可以修改其内容,而不改变其身份(内存地址)。换句话说,可变类型的对象可以添加、删除或修改其元素,但其内存地址不会改变。
- 可以在不改变对象身份的情况下修改其内容。
- 修改可变对象不会创建一个新的对象,而是在原对象上进行更改。
- 可变对象可以作为字典的键(因为键必须是不可变的,而值可以是可变的)。
不可变类型指的是一旦创建后,就不能更改其内容。如果想要修改不可变类型的值,只能创建一个新的对象,并将其赋值给变量。
- 一旦创建后,内容不能修改,任何修改都会创建一个新的对象。
- 不可变对象在内存中的地址是固定的。
- 不可变对象在作为字典的键时是安全的,因为它们的值不会更改。
Python中
可变类型包括列表(list)、字典(dictionary)、集合(set)等,
不可变类型包括整数(int)、浮点数(float)、字符串(str)、元组(tuple)、冻结集合(frozenset)等。
怎么判断一个数据类型是不是可变类型
-
麻烦方法:用 id(X) 函数,对 X 进行某种操作,比较操作前后的 id ,如果不一样,则 X 不可变,如果一样,则 X 可变。
-
便捷方法:用 hash(X) ,只要不报错,证明 X 可被哈希,即不可变,反过来不可被哈希,即可变。
定义
1.无序的
2.基本元素(key:value)
3.集合性质:键(key) 必须互不相同,键一般是唯一的,如果重复最后的一个键值对会替换前面的
语法
{元素, 元素, 元素, ……,元素n}
d = {key1 : value1, key2 : value2 }
1.元素:(key : value)
2.符号: { } , :
{ }把所有元素绑在一起
, 分割元素
: 分割 键和值
3.key:
必须是不可变类型,比如:整数(int)、浮点数(float)、字符串(str)、元组(tuple)、冻结集合(frozenset)
键(key) 必须互不相同,键一般是唯一的,如果重复最后的一个键值对会替换前面的
创建和访问字典
slogan = {'佳能':'感动常在', '小米':'让每个人都能享受科技的乐趣', '任天堂':'Wii would like to play'}
print(slogan['任天堂']) # Wii would like to play
字典内置函数&方法
Python字典包含了以下内置函数:
序号 | 函数及描述 |
---|---|
1 | cmp(dict1, dict2) 比较两个字典元素。 |
2 | len(dict) 计算字典元素个数,即键的总数。 |
3 | str(dict) 输出字典可打印的字符串表示。 |
4 | type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型。 |
Python字典包含了以下内置方法:
序号 | 函数及描述 |
---|---|
1 | dict.clear() 删除字典内所有元素 |
2 | dict.copy() 返回一个字典的浅复制 |
3 | dict.fromkeys(seq[, value]) 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值 |
4 | dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值 |
5 | dict.has_key(key) 如果键在字典dict里返回true,否则返回false |
6 | dict.items() 以列表返回可遍历的(键, 值) 元组数组 |
7 | dict.keys() 以列表返回一个字典所有的键 |
8 | dict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
9 | dict.update(dict2) 把字典dict2的键/值对更新到dict里 |
10 | dict.values() 以列表返回字典中的所有值 |
11 | [pop(key,default]) 删除字典给定键 key 所对应的键值对,返回值为被删除的值。key值必须给出。 否则,返回default值。 |
12 | popitem() 返回并删除字典中的最后一对键和值。 |
练习题
字典的长度是多少
a. 请修改’java’ 这个key对应的value值为98
b. 删除 c 这个key
c. 增加一个key-value对,key值为 php, value是90
d. 获取所有的key值,存储在列表里
e. 获取所有的value值,存储在列表里
f. 判断 javascript 是否在字典中
g. 获得字典里所有value 的和
h. 获取字典里最大的value
i. 获取字典里最小的value
j. 字典 dic1 = {‘php’: 97}, 将dic1的数据更新到dic中
dic = {
'python': 95,
'java': 99,
'c': 100
}
print(dic) # {'python': 95, 'java': 99, 'c': 100}
# a
dic['java'] = 98
print(dic) # {'python': 95, 'java': 98, 'c': 100}
# b
print(dic.pop('c')) # 100
print(dic) # {'python': 95, 'java': 98}
# c
dic['php'] = 90
print(dic) # {'python': 95, 'java': 98, 'php': 90}
# d
key_list = dic.keys()
print(key_list) # dict_keys(['python', 'java', 'php'])
# e
value_list = dic.values()
print(value_list) # dict_values([95, 98, 90])
# f
print(dic.get('javascript')) # None
print(dic.get('php')) # 90
# g
sum_value = 0
for key in dic:
sum_value += dic[key]
print(sum_value) # 283
# h
max_value = max(dic.values())
print(max_value) # 98
# i
min_value = min(dic.values())
print(min_value) # 90
# j
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(score_dict):
type_score = type(score_dict)
if type_score == dict:
for key in score_dict:
score_dict[key] = transfer_score(score_dict[key])
elif type_score == list:
for x in score_dict:
score_dict = transfer_score(x)
else:
score_dict = int(score_dict)
return score_dict
data = {
'python': {'上学期': '90', '下学期': '95'},
'c++': ['95', '96', '97'],
'java': [{'月考': '90', '期中考试': '94', '期末考试': '98'}]
}
data = transfer_score(data)
print(data)
# {'python': {'上学期': 90, '下学期': 95}, 'c++': 97, 'java': {'月考': 90, '期中考试': 94, '期末考试': 98}}
使用递归思想:
先判断类型,
字典
递归调用,访问值,更新值
列表
递归调用,访问元素, 更新元素
字符串
转换为int型,返回值