Pyhton基础学习系列11——字典
2023-12-28 20:22:06
文章目录
一、认识字典
- 字典(dictionary)是除列表之外python之中最灵活的内置数据结构类型
- 列表是有序的,字典是无序的,列表通过索引下标来进行增删改查,而字典是通过键来进行增删改查。
- 二者区分使用的方法就是:需要同时保存多个意义不同的数据的时候就用字典;如果需要同时保存多个意义相同的数据就用列表
- 字典是容器型数据类型;将{}作为容器的标志,里面多个键值对用逗号隔开:{键1: 值1, 键2: 值2, …}
- 语法:dict(变量名) = {key1 : value1, key2 : value2 },key是键,value是值。dict 作为 Python 的关键字和内置函数,变量名不建议命名为 dict,这里只是用作于理解。
- 键 - 键只能是不可变类型的数据(一般是字符串);键是唯一的
- 值 - 可以是任何类型的数据
- 键值对:必须成对出现;真正想要存储的是值,键是用来对值进行区分和说明。
二、字典的使用方法
1.字典的增删改查
1.查 - 获取字典的值
- 字典[键] - 获取字典中指定键对应的值,如果键不存在会报错
dog = {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
print(dog['name'])
# 可乐
print(dog['gender'])
# 公
# print(dog['weight']) # 报错! KeyError: 'weight'
- 字典.get(键) - 获取字典中指定键对应的值,如果键不存在不会报错返回None
- 字典.get(键, 默认值) - 获取字典中指定键对应的值,如果键不存在不会报错返回默认值
dog = {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
print(dog.get('name'))
# 可乐
print(dog.get('weight'))
# None
print(dog.get('name', '财财'))
# 可乐
print(dog.get('weight', 10))
# 10
2.增和改
- 字典[键] = 值 - 如果键存在就修改这个键对应的值;如果键不存在就添加键值对
dog = {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
print(dog)
# {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
dog['name'] = '土豆'
print(dog)
# {'name': '土豆', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
dog['weight'] = 15
print(dog)
# {'name': '土豆', 'age': 3, 'breed': '哈士奇', 'gender': '公', 'weight': 15}
- 字典.setdefault(键, 值) - 添加键值对(如果键不存在就添加键值对,如果键存在不会修改值)
dog = {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
dog.setdefault('name', '土豆')
print(dog)
# {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
dog.setdefault('weight', 10)
print(dog)
# {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公', 'weight': 10}
3. 删 - 删除键值对
- del 字典[键] - 删除字典中指定键对应的键值对
dog = {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
del dog['breed']
print(dog)
# {'name': '可乐', 'age': 3, 'gender': '公'}
- 字典.pop(键) - 取走字典中指定键对应值
- 和列表的pop操作一样,都是取走元素,只是表面上看着像删除了,但实际只是取走元素,可以用变量存储起来使用
dog = {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
result = dog.pop('name')
print(dog)
# {'age': 3, 'breed': '哈士奇', 'gender': '公'}
print(result)
# 可乐
- 字典.clear() - 清空字典
dog = {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
dog.clear()
print(dog)
# {}
三、字典相关操作、函数、方法
1.字典的相关操作
- 字典不支持加法运算、乘法运算、比较大小
- 理论上sum、max、min、sorted字典都支持,但是没有意义(这些操作都是作用在键上),因为一般我们在处理数据时需要处理的都是值,键只是起到了一个对值进行区分和说明的作用。
1.in 和 not in - 判断字典中是否存在指定的键
dog = {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
print('可乐' in dog) # False
print('name' in dog) # True
2.字典的函数操作
1.len(字典) - 统计字典中键值对的个数
dog = {'name': '可乐', 'age': 3, 'breed': '哈士奇', 'gender': '公'}
print(len(dog))
# 4
2.dict(数据) - 将指定的数据转换成字典
- 对数据的要求:
- a.数据本身是一个容器
- b.容器中的每一个元素必须是有两个元素的小容器
- c.小容器中的第一个元素必须是不可变类型数据
data = [(10, 20), 'ab', range(2)]
print(dict(data))
# {10: 20, 'a': 'b', 0: 1}
data = [(100, 23), ('name', '小明'), (80, 100)]
print(data)
# [(100, 23), ('name', '小明'), (80, 100)]
- 一种列表下标作为键,元素作为值的转换方法enumerate
- 之前在列表中也说过,它其实就是把列表的下标和元素变成一个元组保存在列表中
names = ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德']
print(dict(enumerate(names)))
# {0: '琴酒', 1: '灰原哀', 2: '柯南', 3: '毛利兰', 4: '贝尔摩德'}
3.字典的操作方法
1.复制字典
- 字典.copy() - 复制字典产生一个一模一样的新字典
- 和列表操作一样,都是创建一个新的字典,元素一样,地址不同
names = {0: '琴酒', 1: '灰原哀', 2: '柯南', 3: '毛利兰', 4: '贝尔摩德'}
print(id(names))
# 18882368
print(id(names.copy()))
# 18822976
print(names.copy())
# {0: '琴酒', 1: '灰原哀', 2: '柯南', 3: '毛利兰', 4: '贝尔摩德'}
2.获取字典所有的键,返回一个新的容器
- 字典.keys()
- 返回的不是列表
names = {0: '琴酒', 1: '灰原哀', 2: '柯南', 3: '毛利兰', 4: '贝尔摩德'}
print(names.keys())
# dict_keys([0, 1, 2, 3, 4])
# 虽然返回的不是列表没办法进行列表的操作,但只要是容器就可以循环取值
for i in names.keys():
print(i,end=" ")
# 0 1 2 3 4
3. 获取字典所有的值,返回一个新的容器
- 字典.values()
- 和key一样返回容器型数据类型,但不是列表也可以用循环取值
names = {0: '琴酒', 1: '灰原哀', 2: '柯南', 3: '毛利兰', 4: '贝尔摩德'}
print(names.values())
# dict_values(['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德'])
for i in names.values():
print(i,end=" ")
# 琴酒 灰原哀 柯南 毛利兰 贝尔摩德
4. 将字典的每一个键值对转换成元组
- 字典.items()
- 返回的不是列表,但是容器型数据可以循环遍历取值操作
names = {0: '琴酒', 1: '灰原哀', 2: '柯南', 3: '毛利兰', 4: '贝尔摩德'}
print(names.items())
# dict_items([(0, '琴酒'), (1, '灰原哀'), (2, '柯南'), (3, '毛利兰'), (4, '贝尔摩德')])
for i in names.items():
print(i,end=" ")
# (0, '琴酒') (1, '灰原哀') (2, '柯南') (3, '毛利兰') (4, '贝尔摩德')
5. 批量添加字典数据
- 字典1.update(字典2) - 将字典2中所有的键值对都添加到字典1中
names = {0: '琴酒', 1: '灰原哀', 2: '柯南', 3: '毛利兰', 4: '贝尔摩德'}
names.update({5: '赤井秀一', 6: '阿笠博士'})
print(names)
# {0: '琴酒', 1: '灰原哀', 2: '柯南', 3: '毛利兰', 4: '贝尔摩德', 5: '赤井秀一', 6: '阿笠博士'}
四、字典推导式
- {表达式1:表达式2 for 变量 in 容器}
- {表达式1:表达式2 for 变量 in 容器 if 条件语句}
- 基本和列表推导式一样,只不过是换了[ ]换成了{ },表达式中间用:连接,其他都是一样的
result = {x: x**2 for x in range(10)}
print(result)
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
总结
字典(dictionary)是除列表之外python之中最灵活的内置数据结构类型,键只能是不可变类型的数据(一般是字符串)并且键是唯一的,值 - 可以是任何类型的数据,熟练掌握字典和列表的操作,后面在进行数据处理时会有很大帮助。
文章来源:https://blog.csdn.net/qq_49771146/article/details/135253975
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!