08_Python数据类型_字典
Python的基础数据类型
- 数值类型:整数、浮点数、复数、布尔
- 字符串
- 容器类型:列表、元祖、字典、集合
字典
- 字典(Dictionary)是一种可变容器模型,它可以存储任意类型对象,其中每个对象都存储为一个键值对。
- 字典是Python中唯一内建的
映射类型
,通常用于存储具有映射关系的数据。 - 一个元素分为两部分:
key
:value
,键值对。
定义字典
字典是由大括号 {} 包围的键值对集合,每个键值对由冒号 : 分隔,不同的键值对之间用逗号 , 分隔。
# 创建一个空字典
empty_dict = {}
print(empty_dict)
# 创建一个包含几个键值对的字典
my_dict = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
print(my_dict)
字典的特性
- 字典中的键必须是唯一的,而值不必是唯一的。
- 字典中的键必须是不可变的数据类型,如字符串、数字或元组,但不能是列表或字典。
- 字典是无序的,尽管在Python 3.7+中,字典会保持插入顺序。
访问字典元素
可以通过键来访问字典中的值。
# 访问字典中的值
value = my_dict['key1'] # 结果是 'value1'
print(value)
如果尝试访问一个不存在的键,将会抛出 KeyError。
# value4 = my_dict['key4'] # 结果是 KeyError
字典操作
字典支持多种操作,如下所示:
- 添加键值对:直接赋值给新的键。
- 修改键值对:直接赋值给已存在的键。
- 删除键值对:使用 del 语句或 pop() 方法。
print(my_dict)
# 添加键值对
my_dict['new_key'] = 'new_value'
print(my_dict)
my_dict.setdefault('new_key2', 'new_value2')
print(my_dict)
# 修改键值对
my_dict['key1'] = 'updated_value'
print(my_dict)
# 删除键值对
del my_dict['key2']
print(my_dict)
# 或者, 根据key删除键值对。
removed_value = my_dict.pop('key3')
print(my_dict)
字典方法
字典提供了许多有用的方法,如:
- keys():返回字典中的所有键。
- values():返回字典中的所有值。
- items():返回字典中的所有键值对。
- get():返回指定键的值,如果键不存在,则返回默认值(默认为 None)。没有找到不会报错,可以设置查找不到的返回默认值。
- update():使用另一个字典的键值对更新当前字典。
# 获取字典中的所有键
keys = my_dict.keys()
print(keys)
# 获取字典中的所有值
values = my_dict.values()
print(values)
# 获取字典中的所有键值对,返回元组的形式。
items = my_dict.items()
print(items)
# 安全地获取字典中的值
value = my_dict.get('key1', 'default_value')
print(value)
# 更新字典
my_dict.update({'key4': 'value4', 'key5': 'value5'})
print(my_dict)
遍历字典
- 默认遍历key
- 可以遍历key
- 可以遍历value
- 可以遍历键值对
# 默认遍历key
for i in my_dict:
print(i)
# 遍历key
for k in my_dict.keys():
print(k)
# 遍历value
for v in my_dict.values():
print(v)
# 遍历键值对
for k, v in my_dict.items():
print(k, v)
字典推导式
与列表推导式类似,字典推导式可以用来生成字典。
# 创建一个字典,键为0-9每个数字,值为每个数字的平方
squared_dict = {x: x**2 for x in range(10)}
print(squared_dict)
# 字典推导式
new_dict = {k:v for k,v in my_dict.items()}
print(new_dict)
# 带条件的字典推导式
my_dict6 = {'张三':95, '李四':60, '王五':85, '赵六':30}
new_dict = {k:v for k,v in my_dict6.items() if v >= 85}
print(new_dict)
字典的复制
字典的复制可以通过直接赋值、浅拷贝或深拷贝来实现。
- 直接赋值:新变量引用同一个字典。
- 浅拷贝:创建一个新字典,但不复制内部对象的引用。
- 深拷贝:创建一个新字典,并递归地复制内部对象。
import copy
# 直接赋值
dict1 = {'a': 1, 'b': 2,'c':{'a': 1}}
dict2 = dict1 # dict2 是 dict1 的引用
print("dict1:",dict1)
print("dict2:",dict2)
print("id(dict1):",id(dict1))
print("id(dict1['c']):",id(dict1['c']))
print("id(dict2):",id(dict2))
# 浅拷贝
dict3 = copy.copy(dict1)
print("dict3:",dict3)
print("id(dict3):",id(dict3))
print("id(dict3['c']):",id(dict3['c']))
# 深拷贝
dict4 = copy.deepcopy(dict1)
print("dict4:",dict4)
print("id(dict4):",id(dict4))
print("id(dict4['c']):",id(dict4['c']))
字典是Python中非常强大的数据结构,它提供了灵活的数据存储和访问方式,适用于各种需要键值对映射的场景。
附件
本文对应的jupyter notebook源码链接,欢迎下载练习:https://download.csdn.net/download/fx_yzjy101/89760981
如有问题请留言。