深入了解 Python 字典的常用操作
是否想掌握 Python 字典的使用技巧?本教程将详细介绍 Python 字典的各种方法,涵盖读取、修改以及其他常见操作。
我们将从复习 Python 字典的基础概念入手,然后创建一个实例字典,并通过 Python 字典方法对其进行修改。
现在,让我们开始吧…
Python 字典概览
字典是 Python 中一种非常实用的内置数据结构。它允许以键值对的形式存储数据,从而建立键和值之间的关联或映射关系。
字典中的键必须是唯一的(因为它们是可哈希的)。你可以使用键来查找对应的值,或者使用内置方法(稍后你会学到这些方法)。
创建 Python 字典时,可以选择先初始化所有的键值对,也可以先创建一个空字典,再逐个添加键值对。
>>> dict1 = {'language':'Python','like':True} >>> type(dict1) <class 'dict'> # 或者,可以这样做: >>> dict1 = {} >>> dict1['language']='Python' >>> dict1['like']=True
Python 字典的常用方法
温馨提示:为了确保代码示例顺利运行,请安装 Python 3.7 或更高版本。
您可以在 Python REPL 中进行实践,也可以使用 techblik.com 提供的在线 Python 编辑器。
>>> person = {'name':'Alice', ... 'city':'Portland', ... 'interest':'Programming', ... 'profession':'Developer' ... }
现在,我们已经初始化了一个 Python 字典,接下来让我们探索各种字典方法。
使用 `keys()` 获取字典的键
使用 Python 字典时,一个常见的操作是访问所有的键、值和键值对。要获取字典的键,可以调用 `keys()` 方法,如下所示:
>>> person.keys() dict_keys(['name', 'city', 'interest', 'profession'])
使用 `values()` 获取字典的值
`values()` 方法会返回字典中所有的值,当需要进一步处理这些值时,非常有用。
让我们访问 `person` 字典中的所有值:
>>> person.values() dict_values(['Alice', 'Portland', 'Programming', 'Developer'])
使用 `items()` 获取键值对
`items()` 方法返回的是一个包含键值元组的列表。因此,在 `person` 字典上调用这个方法会返回一个键值元组列表:
>>> person.items() dict_items([('name', 'Alice'), ('city', 'Portland'), ('interest', 'Programming'), ('profession', 'Developer')])
使用 `copy()` 获取浅拷贝
`copy()` 方法会返回 Python 字典的一个浅拷贝。
>>> person_cpy = person.copy()
这里,`person_cpy` 是 `person` 字典的一个浅拷贝。让我们通过将“name”键的值更新为“Bob”来修改这个副本。
>>> person_cpy['name'] = 'Bob' >>> person_cpy
现在,如果你检查字典的内容,你会看到“name”的值已经更新为“Bob”。
{ 'name': 'Bob', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer' }
但是,原始的 `person` 字典并没有被修改。
>>> person
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer' }
使用 `setdefault()` 设置默认值
在使用 Python 字典时,如果字典中不存在某个键,通常会遇到 `KeyError` 异常。以下是一个我们尝试访问“age”键时的示例:
>>> person['age'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'age'
可以通过使用内置方法 `setdefault()` 和 `get()` 来避免此类错误,而不是像上面那样直接访问值。
`setdefault(key)` 方法会在字典中查找键 `key`,如果找到,则返回 `字典[‘key’]`。
>>> person.setdefault('name') 'Alice'
当键不存在时,它会将键添加到字典中,并赋予默认值 `None`。
>>> person.setdefault('address') >>> person
在这里,`’address’` 键在 `person` 字典中不存在。但我们看到它已经被添加,并赋予了默认值 `None`。
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': None }
现在,我们可以将“address”键的值设置为某个地址:
>>> person['address'] = "10, xyz street"
>>> person
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': '10, xyz street' }
你还可以在方法调用中指定值,如下所示:
>>> person.setdefault('country','USA') 'USA' >>> person
由于 `’country’` 键最初在 `person` 字典中不存在,所以我们看到它被添加了,值设置为 `’USA’`。
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': '10, xyz street', 'country': 'USA' }
使用 `get()` 获取特定值
`get()` 方法返回与键对应的值。如果在字典中找不到该键,还可以选择返回一个指定的默认值。
当我们尝试访问“name”键的值时,我们会得到“Alice”,因为该键存在:
>>> person.get('name') 'Alice'
`person` 字典没有“gpa”键。所以,当我们试图获取它的值时,我们在 Python REPL 中什么也得不到。但如果打印出该值,你会得到 `None`。
>>> person.get('gpa') >>> print(person.get('gpa')) None
但是,如果你提供可选的默认值,我们将获得该值,而不是 `None`。
>>> person.get('gpa','not found') 'not found'
需要注意的是,`get()` 方法不会将“gpa”键添加到字典中。
>>> person
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': '10, xyz street', 'country': 'USA' }
`setdefault()` 与 `get()` 的比较
尽管 `setdefault()` 和 `get()` 方法都可用于处理 `KeyError`,但让我们总结一下它们之间的差异:
- `dict.setdefault(key,val)` 添加一个键,值为 `val` 作为默认值。如果没有提供 `val`,则为键添加默认值 `None`。
- `dict.get(key,val)` 从 Python 字典中返回与键对应的值。如果键不存在,则返回 `val`(如果提供了),否则返回 `None`,但不会将键添加到字典中。
你也可以使用 Python 中的 `defaultdict` 来更好地处理 `KeyError`。
使用 `update()` 更新字典内容
你可以使用另一个字典中的键值对来更新已有的 Python 字典。你还可以使用 `update()` 方法来更新任何 Python 可迭代对象的内容。
让我们定义一个 `more_details` 字典。然后,我们使用 `more_details` 字典中的内容来更新 `person` 字典:
>>> more_details = {'hobby':'singing', 'likes':'sweets'} >>> person.update(more_details)
从下面的输出中,我们看到 `’hobby’` 和 `’likes’` 键已经被添加到 `person` 字典中。
>>> person
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': '10, xyz street', 'country': 'USA', 'hobby': 'singing', 'likes': 'sweets' }
使用 `popitem()` 删除最后添加的项目
`popitem()` 字典方法可以用来删除最后添加的键值对。
>>> person.popitem() ('likes', 'sweets')
如所示,调用 `person` 字典的 `popitem()` 方法会返回 `(‘likes’, ‘sweets’)` 键值对,也就是字典中最后添加的项目。
它也会删除该键值对。你可以通过检查字典的内容来确认这一点:
>>> person
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': '10, xyz street', 'country': 'USA', 'hobby': 'singing' }
使用 `pop()` 删除字典项
我们知道 `popitem()` 字典方法会删除并返回 Python 字典中的最后一个键值对。然而,有时我们可能需要删除其他项目,而不只是最后添加的键值对。
为此,我们可以使用 Python 字典方法 `pop()`:在字典上使用 `.pop(key)` 可以返回与键对应的值,并从字典中删除该键值对。
这是一个示例:
>>> person.pop('hobby') 'singing'
当我们弹出对应于键“hobby”的项目时,我们看到它不再存在于字典中。
>>> person
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': '10, xyz street', 'country': 'USA' }
如果我们传入一个不存在的键,我们会遇到 `KeyError` 异常,如下所示:
>>> person.pop('age') Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'age'
这里,我们遇到了 `KeyError` 异常,因为 `person` 字典中不存在“age”键。
与默认删除最后一项的列表 `pop()` 方法不同,字典 `pop()` 方法需要一个键。如果在方法中没有指定键,我们会遇到错误。
>>> person.pop() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: pop expected at least 1 argument, got 0
使用 `clear()` 删除所有字典项
字典的 `pop()` 和 `popitem()` 方法一次删除一个键值对。如果要删除字典中的所有项目,可以使用 `clear()` 方法。
>>> person.clear() >>> person {}
如所示,调用 `person` 字典上的 `clear()` 方法会删除所有的键值对,并且 `person` 字典现在为空。
Python 字典方法总结
下面是我们所学的 Python 字典方法的快速回顾。
方法 | 语法 | 描述 |
keys() | dict1.keys() | 返回 dict1 的键 |
values() | dict1.values() | 返回 dict1 的值 |
items() | dict1.items() | 返回 dict1 中所有键值对的列表 |
copy() | dict1.copy() | 返回 dict1 的浅拷贝 |
setdefault() | dict1.setdefault(key, default_value) |
|
get() | dict1.get(key,default_value) |
|
update() | dict1.update(iterable1) | 使用 `iterable1` 中的键值对更新 `dict1` |
popitem() | dict1.popitem() | 从 `dict1` 中删除并返回最后一个键值对 |
pop() | dict1.pop(key) |
|
clear() | dict1.clear() | 删除 `dict1` 中的所有项目 |
结论
你已经学习了如何使用常用的方法对 Python 字典执行读取、更新和删除操作。此外,你还了解了如何使用 `get()` 和 `setdefault()` 方法来处理 `KeyError` 异常,通过返回默认值或向 Python 字典添加具有默认值的条目。 你也可以按键或按值对 Python 字典进行排序。
接下来,请查看有用的 Python 列表方法列表。编码愉快!