5、字典dict的常用方法
一、字典的创建
1、创建空字典
# 方式1:使用大括号
dict1 = {}
print(dict1) # 输出: {}
# 方式2:使用dict()
dict2 = dict()
print(dict2) # 输出: {}
2、创建带有初始值的字典
# 方式1:直接创建
dict1 = {'name': 'Python', 'age': 30}
print(dict1) # 输出: {'name': 'Python', 'age': 30}
# 方式2:使用dict()和关键字参数
dict2 = dict(name='Python', age=30)
print(dict2) # 输出: {'name': 'Python', 'age': 30}
# 方式3:使用列表创建
pairs = [('name', 'Python'), ('age', 30)]
dict3 = dict(pairs)
print(dict3) # 输出: {'name': 'Python', 'age': 30}
二、字典的基本操作
1、访问和修改元素
# 创建一个示例字典
user = {'name': 'Python', 'age': 30, 'skills': ['coding', 'debug']}
# 1. 访问元素
print(user['name']) # 输出: Python
print(user.get('age')) # 输出: 30
print(user.get('height', 175)) # 输出: 175 (不存在时返回默认值)
# 2. 修改元素
user['age'] = 31
user['city'] = 'Beijing' # 添加新键值对
print(user) # 输出: {'name': 'Python', 'age': 31, 'skills': ['coding', 'debug'], 'city': 'Beijing'}
2、删除元素
# 1. 使用del语句
del user['city']
print(user) # 输出: {'name': 'Python', 'age': 31, 'skills': ['coding', 'debug']}
# 2. 使用pop()
age = user.pop('age')
print(age) # 输出: 31
print(user) # 输出: {'name': 'Python', 'skills': ['coding', 'debug']}
# 3. 使用popitem()删除最后一个键值对
last_item = user.popitem()
print(last_item) # 输出: ('skills', ['coding', 'debug'])
三、字典的常用方法
1、查询方法
user = {'name': 'Python', 'age': 30, 'skills': ['coding', 'debug']}
# 1. keys() - 获取所有键
print(list(user.keys())) # 输出: ['name', 'age', 'skills']
# 2. values() - 获取所有值
print(list(user.values())) # 输出: ['Python', 30, ['coding', 'debug']]
# 3. items() - 获取所有键值对
print(list(user.items())) # 输出: [('name', 'Python'), ('age', 30), ('skills', ['coding', 'debug'])]
# 4. 检查键是否存在
print('name' in user) # 输出: True
print('city' in user) # 输出: False
2、更新方法
# 1. update() - 更新字典
user.update({'city': 'Beijing', 'age': 31})
print(user) # 输出: {'name': 'Python', 'age': 31, 'skills': ['coding', 'debug'], 'city': 'Beijing'}
# 2. setdefault() - 设置默认值
email = user.setdefault('email', 'python@example.com')
print(email) # 输出: python@example.com
print(user) # 输出: {..., 'email': 'python@example.com'}
四、字典的高级操作
1、字典推导式
# 1. 基本字典推导式
numbers = range(5)
squares = {x: x**2 for x in numbers}
print(squares) # 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
# 2. 带条件的字典推导式
even_squares = {x: x**2 for x in numbers if x % 2 == 0}
print(even_squares) # 输出: {0: 0, 2: 4, 4: 16}
2、嵌套字典
# 嵌套字典的创建和访问
users = {
'user1': {
'name': 'Python',
'age': 30,
'skills': ['coding', 'debug']
},
'user2': {
'name': 'Java',
'age': 25,
'skills': ['web', 'database']
}
}
# 访问嵌套字典
print(users['user1']['name']) # 输出: Python
print(users['user2']['skills']) # 输出: ['web', 'database']
五、注意事项
- 字典键的特点
# 1. 键必须是不可变类型
valid_dict = {(1, 2): 'tuple_key', 'str': 'string_key', 1: 'int_key'}
print(valid_dict) # 输出: {(1, 2): 'tuple_key', 'str': 'string_key', 1: 'int_key'}
# 下面的代码会报错
# invalid_dict = {[1, 2]: 'list_key'} # TypeError: unhashable type: 'list'
- 浅拷贝与深拷贝
import copy
# 浅拷贝
dict1 = {'name': 'Python', 'data': [1, 2, 3]}
dict2 = dict1.copy()
dict2['data'].append(4)
print(dict1['data']) # 输出: [1, 2, 3, 4] (原字典也被修改)
# 深拷贝
dict3 = copy.deepcopy(dict1)
dict3['data'].append(5)
print(dict1['data']) # 输出: [1, 2, 3, 4] (原字典不受影响)
- 内存使用
import sys
# 比较不同大小字典的内存占用
small_dict = {'a': 1, 'b': 2}
big_dict = dict.fromkeys(range(100), 0)
print(f'小字典占用内存:{sys.getsizeof(small_dict)} 字节') # 输出: 232 字节
print(f'大字典占用内存:{sys.getsizeof(big_dict)} 字节') # 输出: 4096 字节