内容概要:
- 元组
- 字典
一.元组
1.元组的介绍与特点:Python 内置的数据结构之一,是一个不可变序列
#强制更改的话
stu_01 = ('1001', '陆小果', 100)
stu_01[2] = 99
print(stu_01)
#运行得到:TypeError: 'tuple' object does not support item assignment
#意思是:百度
可变与不可变序列:
- 不可变序列:字符串、元组 (没有增、删,改的操作)
- 可变序列:列表、字典 (可以对序列执行CRUD操作,对象地址不发生更改)
2.元组的创建:
-
直接小括号:
-
使用内置函数tuple()
-
只包含一个元组的元素需要使用逗号和小括号
例如:
num_tuple = (10) #使用小括号,按理应该是tuple类型的
print(type(num_tuple))
结果运行得到:
<class,‘int’> 说明(10)是一个整型数值
正确使用:
num_tuple = (10,) #这个逗号不能少哦
print(type(num_tuple))
3.元组的主要使用场景: 暂时不懂的话没关系😭
- 函数/方法 的参数类型上传递数据.
- 执行函数/方法后, 在返回结果上实现数据的传递.
二.字典(dictionary)
1.格式:
{key1: value1, key2: value2, key3: value3}
- key与value是一种映射关系:key --> value (类似x与y相对映)
- key1: value1, 这是一个键值对,其实就类似于列表中的一个元素(item)
- 所有的key的集合称为键集(keys),所有的value的集合称为值集(values),所有的键值对的集合称为键值对集(items)
#查看字典
scores = {'陆小果': 100, '天下无贼': 55, '认贼作父': 60, '贼眉鼠眼': 66}
print(f'keys = {scores.keys()}')
print(f'values = {scores.values()}')
print(f'items = {scores.items()}')
2.字典不允许通过下标取值
scores = {'陆小果': 100, '天下无贼': 55, '认贼作父': 60}
print(scores[0])
运行得到:KeyError: 0
正确的方法: 通过key来查找对应的value
#需求:查询陆小果的成绩
scores = {'陆小果': 100, '天下无贼': 55, '认贼作父': 60}
print(scores['陆小果'])
如果查询的key在字典中不存在:程序就会报错
scores = {'陆小果': 100, '天下无贼': 55, '认贼作父': 60}
print(scores['贼眉鼠眼'])
运行发生:KeyError
因此:
只能直接查找字典中存在的键值,但现实情况较复杂,很多时候不知道数据中是否有该值,因此需要使用if进行条件判断
scores = {'陆小果': 100, '天下无贼': 55, '认贼作父': 60}
key = input('亲,请输入要查询的姓名:')
if key in scores.keys(): #键集是一个列表数据,因此可以使用in/not in来判断
print(scores[key])
else:
print('对不起,您输入的姓名不存在!')
#----------------------------------------------------------------
scores = {'陆小果': 100, '天下无贼': 55, '认贼作父': 60}
key = input('亲,请输入要查询的姓名:')
if key in scores:
##如果在判断中直接书写字典的名称,其实本质上就是调用了字典的keys
print(scores[key])
else:
print('对不起,您输入的姓名不存在!')
3.key与value的关系
在字典中,key是唯一性的,value是可以重复的.因此只能通过key来查找value,不能通过value来查找key
4.字典的各种操作(CRUD)
①查询:scores[‘陆小果’]
②增加:scores[key] = value
scores = {'陆小果': 100, '天下无贼': 55, '认贼作父': 60}
scores['贼眉鼠眼'] = 70
print(scores)
③修改:scores[key] = value
scores = {'陆小果': 100, '天下无贼': 55, '认贼作父': 60}
scores['认贼作父'] = 70
print(scores)
④删除:del scores[key] 直接删除这个键值对
5.字典生成器
方法一:来硬的
#首先定义两个列表:
names = ['陆小果', '沈剑心', '菠萝吹雪', '东方不败']
scores = [100, 99, 87, 60]
#然后定义一个空字典
grades_dict = {}
for i in range(len(names)):
key = names[i]
value = scores[i]
grades_dict[key] = value
print(grades_dict)
方法二:使用zip()
names = ['陆小果', '沈剑心', '菠萝吹雪', '东方不败']
scores = [100, 99, 87, 60]
grades_dict = {}
for key, value in zip(names, scores):
grades_dict[key] = value
print(grades_dict)
ps:方法一只适用于key与value数量恰好相等,否则会报错
而方法二如果不等则不会报错因此大多数使用方法二的zip()
6.字典的遍历
储存以下数据:
四大天王:
- 歌神-张学友
- 综合-刘德华
- 舞王-郭富城
- 文艺-黎明
#生成一个字典嵌套
four_kings_key = '四大天王'
four_kings_value = {'歌神': 张学友, '综合': 刘德华, '舞王': 郭富城, '文艺': 黎明}
four_kings_dict = {}
four_kings_dict[four_kings_key] =four_kings_value
print(four_kings_dict)
#对字典进行遍历
#方法一
value_dict = four_kings_dict['四大天王'] #取出的任然是一个字典
for key in value_dict.keys():
print(f'{key}{value_dict[key]}')
#方法二 items
for key_data, value_data in value_dict.items():
print({key_data}{value_data})
over over