字典(Dictionary)是Python中唯一内置的映射类型(Mapping Type),通过键-值对(Key-Value)存储数据,以花括号{} 表示。它的核心特性是通过键快速访问值(平均时间复杂度接近O(1)),适用于需要高效查找、插入和删除的场景。
字典的键key是不可变的,但是值value是可变的。
创建字典
创建空字典
python
dict_emtpy = {}
print(f"dict_emtpy = {dict_emtpy}")
dict_emtpy = {}
创建非空字典
python
# 直接创建
dict_data = {"name":"Python", "age":36}
print(f"dict_data = {dict_data}")
dict_data = {'name': 'Python', 'age': 36}
python
# 使用 dict() 构造函数
dict_data = dict(name="Python", age=36)
dict_data2 = dict({"name":"Python", "age":36})
print(f"dict_data = {dict_data}\ndict_data2 = {dict_data2}")
dict_data = {'name': 'Python', 'age': 36}
dict_data2 = {'name': 'Python', 'age': 36}
访问字典元素
使用 [键key] 的方法,直接访问指定元素。
python
dict_data = dict(name="Python", age=36)
result = dict_data["name"]
print(f"dict_data = {dict_data}\ndict_data[\"name\"] = {result}")
python
dict_data = {'name': 'Python', 'age': 36}
dict_data["name"] = Python
当 键key 不存在时,程序报错。
python
dict_data = dict(name="Python", age=36)
result = dict_data["nameage"]
print(f"dict_data = {dict_data}\ndict_data[\"nameage\"] = {result}")
Traceback (most recent call last):
File ".code.tio", line 2, in
result = dict_data["nameage"]
KeyError: 'nameage'
使用 get() 方法,安全访问指定元素,当键不存在时返回None或指定默认值。
python
dict_data = dict(name="Python", age=36)
result = dict_data.get("name",None)
print(f"dict_data = {dict_data}\ndict_data[\"name\"] = {result}")
dict_data = {'name': 'Python', 'age': 36}
dict_data["name"] = Python
不存在时,返回默认值。
python
dict_data = dict(name="Python", age=36)
result = dict_data.get("nameage",None)
print(f"dict_data = {dict_data}\ndict_data[\"nameage\"] = {result}")
dict_data = {'name': 'Python', 'age': 36}
dict_data["nameage"] = None
修改字典元素
单个更新,使用 [键key] 直接赋值更新现有值,当 键key 存在时。
python
dict_data = dict(name="Python", age=36)
print(f"修改前:dict_data = {dict_data}")
dict_data["name"] = "Python 3.0"
print(f"修改后:dict_data = {dict_data}")
修改前:dict_data = {'name': 'Python', 'age': 36}
修改后:dict_data = {'name': 'Python 3.0', 'age': 36}
批量更新,使用 update() 方法合并其他字典或键值对序列。
python
dict_data = dict(name="Python", age=36)
print(f"修改前:dict_data = {dict_data}")
dict_data.update(birthday=1989,name="Python3.0",age=10)
print(f"修改后:dict_data = {dict_data}")
修改前:dict_data = {'name': 'Python', 'age': 36}
修改后:dict_data = {'name': 'Python3.0', 'age': 10, 'birthday': 1989}
添加字典元素
使用 [键key] 直接添加新元素,当 键key 不存在时。
python
dict_data = dict(name="Python", age=36)
print(f"修改前:dict_data = {dict_data}")
dict_data["birthday"] = "1989"
print(f"修改后:dict_data = {dict_data}")
修改前:dict_data = {'name': 'Python', 'age': 36}
修改后:dict_data = {'name': 'Python', 'age': 36, 'birthday': '1989'}
删除字典元素
使用 del 方法,删除指定 [键key] 的元素。
python
dict_data = dict(name="Python", age=36)
print(f"删除前:dict_data = {dict_data}")
del dict_data["age"] # 删除指定元素
print(f"删除后:dict_data = {dict_data}")
删除前:dict_data = {'name': 'Python', 'age': 36}
删除后:dict_data = {'name': 'Python'}
使用 pop(键key) 方法,删除指定元素,并返回值。
python
dict_data = dict(name="Python", age=36)
print(f"删除前:dict_data = {dict_data}")
result = dict_data.pop("age") # 删除指定元素,并返回值
print(f"删除后:dict_data = {dict_data}, result = {result}")
删除前:dict_data = {'name': 'Python', 'age': 36}
删除后:dict_data = {'name': 'Python'}, result = 36
使用 clear() 方法,删除所有元素。
python
dict_data = dict(name="Python", age=36)
print(f"删除前:dict_data = {dict_data}")
dict_data.clear() # 删除所有元素
print(f"删除后:dict_data = {dict_data}")
删除前:dict_data = {'name': 'Python', 'age': 36}
删除后:dict_data = {}
使用 del 方法,删除字典。
python
dict_data = dict(name="Python", age=36)
print(f"删除前:dict_data = {dict_data}")
del dict_data # 删除字典
print(f"删除后:dict_data = {dict_data}")
删除前:dict_data = {'name': 'Python', 'age': 36}
Traceback (most recent call last):
File ".code.tio", line 5, in
print(f"删除后:dict_data = {dict_data}")
NameError: name 'dict_data' is not defined
字典的其他操作
使用 keys() 方法,获取字典的所有键。
python
dict_data = dict(name="Python", age=36)
result = dict_data.keys() # 字典的所有键
print(f"dict_data = {dict_data}\nresult = {result}")
dict_data = {'name': 'Python', 'age': 36}
result = dict_keys(['name', 'age'])
使用 values() 方法,获取字典的所有值。
python
dict_data = dict(name="Python", age=36)
result = dict_data.values() # 字典的所有值
print(f"dict_data = {dict_data}\nresult = {result}")
dict_data = {'name': 'Python', 'age': 36}
result = dict_values(['Python', 36])
使用 len(字典) 方法,获取字典的元素个数。
python
dict_data = dict(name="Python", age=36)
result = len(dict_data) # 字典元素个数
print(f"dict_data = {dict_data}\nresult = {result}")
dict_data = {'name': 'Python', 'age': 36}
result = 2
使用 str(字典) 方法,将字典转字条串。
python
dict_data = dict(name="Python", age=36)
result = str(dict_data) # 字典转字符串
print(f"dict_data = {dict_data}\nresult = {result}")
dict_data = {'name': 'Python', 'age': 36}
result = {'name': 'Python', 'age': 36}
遍历字典
遍历字典的键。
python
dict_data = dict(name="Python", age=36)
print(f"dict_data = {dict_data}")
# 遍历键
for key in dict_data:
print(key)
dict_data = {'name': 'Python', 'age': 36}
name
age
遍历字典的值。
python
dict_data = dict(name="Python", age=36)
print(f"dict_data = {dict_data}")
# 遍历值
for value in dict_data.values():
print(value)
dict_data = {'name': 'Python', 'age': 36}
Python
36
遍历字典的键值对。
python
dict_data = dict(name="Python", age=36)
print(f"dict_data = {dict_data}")
# 遍历键值对
for key, value in dict_data.items():
print(f"{key}: {value}")
dict_data = {'name': 'Python', 'age': 36}
name: Python
age: 36
检查键key是否存在
使用 in 方法
python
dict_data = dict(name="Python", age=39)
result = "name" in dict_data
print(f"dict_data = {dict_data}\n\"name\" in dict_data = {result}")
dict_data = {'name': 'Python', 'age': 39}
"name" in dict_data = True
字典复制
使用 copy() 方法。
python
dict_data = dict(name="Python", age=39)
result = dict_data.copy()
print(f"dict_data = {dict_data}\nresult = {result}")
dict_data = {'name': 'Python', 'age': 39}
result = {'name': 'Python', 'age': 39}
字典和字符串的互相转换
字典转换成json字符串。
python
import json
dict_data = dict(name="Python", age=39)
str_data = json.dumps(dict_data)
print(f"dict_data = {dict_data}\nstr_data = {str_data}, type = {type(str_data)}")
dict_data = {'name': 'Python', 'age': 39}
str_data = {"name": "Python", "age": 39}, type = <class 'str'>
json字符串转换成字典。
python
import json
str_data = '{"name": "Python", "age": 39}'
dict_data = json.loads(str_data)
print(f"str_data = {str_data}, type = {type(str_data)}\ndict_data = {dict_data}, type = {type(dict_data)}")
str_data = {"name": "Python", "age": 39}, type = <class 'str'>
dict_data = {'name': 'Python', 'age': 39}, type = <class 'dict'>