10 个有用的 Python 字典方法

深入了解 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)
  • 添加带有可选 `default_value` 的 `key` 作为 `dict1` 的键(未指定时,默认值为 `None`)
  • 如果键已经存在,则返回 `dict1[key]`
get() dict1.get(key,default_value)
  • 返回 `dict1[key]`,如果 `key` 存在于 `dict1` 中;否则,返回 `default_value`
  • 如果 `dict1` 中不存在键且未指定 `default_value`,则返回 `None`
update() dict1.update(iterable1) 使用 `iterable1` 中的键值对更新 `dict1`
popitem() dict1.popitem() 从 `dict1` 中删除并返回最后一个键值对
pop() dict1.pop(key)
  • 取出并返回对应 `key` 的值:`dict1[key]`
  • 如果键不存在于 `dict1` 中,则引发 `KeyError`
clear() dict1.clear() 删除 `dict1` 中的所有项目

结论

你已经学习了如何使用常用的方法对 Python 字典执行读取、更新和删除操作。此外,你还了解了如何使用 `get()` 和 `setdefault()` 方法来处理 `KeyError` 异常,通过返回默认值或向 Python 字典添加具有默认值的条目。 你也可以按键或按值对 Python 字典进行排序。

接下来,请查看有用的 Python 列表方法列表。编码愉快!