1. Python中字典的概念与特点
Python的字典是一种可变容器模型,可存储任意类型对象。字典的每个元素都是由一个key
和其对应的value
组成的,可以通过key
来访问对应的value
。字典使用大括号{}
表示,key
和value
之间用冒号:
分隔,每个元素之间用逗号,
分隔,示例代码如下:
dict1 = {'name': 'John', 'age': 18, 'score': [80, 90, 85]}
print(dict1['name']) # 输出 John
print(dict1['score']) # 输出 [80, 90, 85]
字典具有以下特点:
字典中的key
必须是不可变类型,如字符串、数字或元组;
字典是无序的,即字典中的元素没有顺序之分,不支持索引和切片;
字典中的key
必须是唯一的,如果有重复的key
,后面的会覆盖前面的。
2. 字典的基本操作
2.1. 创建字典
可以使用大括号{}
来创建一个空字典,也可以在大括号中提供初始的key-value
对来创建一个包含多个元素的字典,示例代码如下:
dict1 = {}
dict2 = {'name': 'John', 'age': 18, 'score': [80, 90, 85]}
另外,还可以通过字典的fromkeys()
方法来创建一个包含指定key
的字典,每个key
对应的初始value
均为None
,示例代码如下:
dict3 = dict.fromkeys(['name', 'age', 'score'])
print(dict3) # 输出 {'name': None, 'age': None, 'score': None}
2.2. 访问字典中的元素
可以通过key
来访问字典中对应的value
,如果key
不存在,则会抛出KeyError
异常,示例代码如下:
dict1 = {'name': 'John', 'age': 18, 'score': [80, 90, 85]}
print(dict1['name']) # 输出 John
print(dict1['gender']) # 抛出 KeyError 异常
除了使用[]
来访问字典元素外,还可以使用字典的get()
方法来访问元素,如果key
不存在,则返回指定的默认值(默认值为None
),示例代码如下:
dict1 = {'name': 'John', 'age': 18, 'score': [80, 90, 85]}
print(dict1.get('name')) # 输出 John
print(dict1.get('gender')) # 输出 None
print(dict1.get('gender', 'unknown')) # 输出 unknown
2.3. 添加和修改字典元素
可以使用[]
来添加和修改字典中的元素,示例代码如下:
dict1 = {'name': 'John', 'age': 18, 'score': [80, 90, 85]}
dict1['gender'] = 'male' # 添加新元素
dict1['age'] = 19 # 修改元素
print(dict1) # 输出 {'name': 'John', 'age': 19, 'score': [80, 90, 85], 'gender': 'male'}
另外,还可以通过字典的update()
方法来批量添加或修改字典的元素,示例代码如下:
dict1 = {'name': 'John', 'age': 18, 'score': [80, 90, 85]}
dict1.update({'gender': 'male', 'age': 19})
print(dict1) # 输出 {'name': 'John', 'age': 19, 'score': [80, 90, 85], 'gender': 'male'}
2.4. 删除字典元素
可以使用del
语句或字典的pop()
方法来删除字典中指定key
的元素,示例代码如下:
dict1 = {'name': 'John', 'age': 18, 'score': [80, 90, 85]}
del dict1['age'] # 删除元素
print(dict1) # 输出 {'name': 'John', 'score': [80, 90, 85]}
value = dict1.pop('score') # 删除元素并返回对应的 value
print(dict1) # 输出 {'name': 'John'}
print(value) # 输出 [80, 90, 85]
另外,还可以通过字典的clear()
方法来清空字典中所有元素,示例代码如下:
dict1 = {'name': 'John', 'age': 18, 'score': [80, 90, 85]}
dict1.clear()
print(dict1) # 输出 {}
3. 字典的常用方法
3.1. keys()方法
字典的keys()
方法返回一个包含所有key
的列表,示例代码如下:
dict1 = {'name': 'John', 'age': 18, 'score': [80, 90, 85]}
keys = dict1.keys()
print(keys) # 输出 dict_keys(['name', 'age', 'score'])
返回的列表可以用list()
函数转换为列表,也可以直接遍历:
dict1 = {'name': 'John', 'age': 18, 'score': [80, 90, 85]}
for key in dict1.keys():
print(key, dict1[key])
3.2. values()方法
字典的values()
方法返回一个包含所有value
的列表,示例代码如下:
dict1 = {'name': 'John', 'age': 18, 'score': [80, 90, 85]}
values = dict1.values()
print(values) # 输出 dict_values(['John', 18, [80, 90, 85]])
返回的列表同样可以用list()
函数转换为列表,也可以直接遍历:
dict1 = {'name': 'John', 'age': 18, 'score': [80, 90, 85]}
for value in dict1.values():
print(value)
3.3. items()方法
字典的items()
方法返回一个包含所有key-value
对的列表,每个key-value
对是一个元组,示例代码如下:
dict1 = {'name': 'John', 'age': 18, 'score': [80, 90, 85]}
items = dict1.items()
print(items) # 输出 dict_items([('name', 'John'), ('age', 18), ('score', [80, 90, 85])])
返回的列表同样可以用list()
函数转换为列表,也可以直接遍历:
dict1 = {'name': 'John', 'age': 18, 'score': [80, 90, 85]}
for key, value in dict1.items():
print(key, value)
3.4. copy()方法
字典的copy()
方法返回一个浅拷贝的字典,示例代码如下:
dict1 = {'name': 'John', 'age': 18, 'score': [80, 90, 85]}
dict2 = dict1.copy()
print(dict2) # 输出 {'name': 'John', 'age': 18, 'score': [80, 90, 85]}
print(dict1 is dict2) # 输出 False
注意,copy()
方法只会拷贝对象的引用,而不会复制对象本身,因此对于可变对象,修改一个字典中元素的值可能会影响拷贝出来的字典。
3.5. setdefault()方法
字典的setdefault()
方法用于获取指定key
的value
,如果key
不存在,则将其加入字典并设置对应的默认值,示例代码如下:
dict1 = {'name': 'John', 'age': 18, 'score': [80, 90, 85]}
name = dict1.setdefault('name', 'unknown')
gender = dict1.setdefault('gender', 'male')
print(name, dict1) # 输出 John {'name': 'John', 'age': 18, 'score': [80, 90, 85], 'gender': 'male'}
print(gender, dict1) # 输出 male {'name': 'John', 'age': 18, 'score': [80, 90, 85], 'gender': 'male'}
4. 字典的应用场景
字典是Python中使用频率非常高的一种数据类型,其应用场景非常广泛。
4.1. 统计词频
在自然语言处理中,常常需要统计一段文本中每个单词出现的次数,这时可以使用字典来实现。例如,下面的代码统计了一段文本中每个单词出现的次数:
text = 'This is a sample text with several words. This is another sample text with some more words.'
words = text.split() # 将文本按空格分隔成单词列表
counts = {}
for word in words:
counts[word] = counts.get(word, 0) + 1 # 统计每个单词出现的次数
print(counts)
输出结果如下:
{'This': 2, 'is': 2, 'a': 1, 'sample': 2, 'text': 2, 'with': 2, 'several': 1, 'words.': 1, 'another': 1, 'some': 1, 'more': 1}
4.2. 处理配置文件
配置文件通常以键值对的形式保存,可以使用字典来存储和读取配置文件中的键值对。
例如,下面的代码读取了一个名为config.json
的JSON文件,将其中的键值对读入字典config
中:
import json
with open('config.json', 'r') as f:
config = json.load(f)
print(config)
4.3. 缓存数据
在一些计算任务中,为了加速计算过程,常常需要将中间结果保存下来,以便于后续计算时直接读取,避免重复计算。这时可以使用字典来实现中间数据的缓存:
def expensive_func(param):
"""一个复杂的计算函数"""
# ...
return result
cache = {}
def cached_func(param):
"""一个带缓存的计算函数"""
if param not in cache:
cache[param] = expensive_func(param)
return cache[param]
在这段代码中,在每次调用cached_func()
时,先检查缓存中是否已经有了计算结果,有则直接返回,没有则调用expensive_func()
进行计算,并将结果存入缓存。
5. 总结
字典是一种非常常用的数据类型,它能够快速地查找指定key
对应的value
,并且支持动态添加、删除和修改元素。另外,字典的应用场景非常广泛,例如统计词频、处理配置文件和缓存数据等。因此,掌握字典的使用方法是Python编程的重要基础。