10 个有用的 Python 字典方法

你想学习如何使用 Python 字典吗? 本教程将介绍用于读取、修改和执行其他常见操作的 Python 字典方法。

我们将从回顾 Python 字典的基础知识开始,然后创建一个示例字典并使用 Python 字典方法对其进行修改。

让我们开始吧…

Python 字典概述

字典是 Python 中的内置数据结构。 它允许您将项目存储在键值对中——定义键和值之间的关联或映射。

字典中的键应该是唯一的(因为它们是可散列的)。 您可以使用键来查找值或使用内置方法(您很快就会了解它们)。

创建Python字典时,可以先初始化所有的键值对,也可以先初始化一个空字典再添加键值对。

>>> dict1 = {'language':'Python','like':True}
>>> type(dict1)
<class 'dict'>

# or we can do the following:

>>> 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

现在,如果您检查字典的内容,您会看到“姓名”已更新为“Bob”。

{
 'name': 'Bob', 
 'city': 'Portland', 
 'interest': 'Programming', 
 'profession': 'Developer'
}

但是,原来的person字典并没有被修改。

>>> person
{
 'name': 'Alice', 
 'city': 'Portland', 
 'interest': 'Programming', 
 'profession': 'Developer'
}

使用 setdefault() 设置默认值

使用 Python 字典时,如果字典中不存在键,则通常会遇到 KeyError 异常。 这是我们尝试访问“年龄”键时的示例:

>>> person['age']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'age'

您可以通过使用内置方法 setdefault() 和 get() 方法而不是像上面那样访问值来避免此类错误。

  修复 PS4 错误 CE-34788-0

setdefault(key) 方法返回字典[‘key’] 如果密钥存在于字典中。

>>> person.setdefault('name')
'Alice'

当键不存在时,它会将键添加到字典中,默认值为 None。

>>> person.setdefault('address')
>>> person

在这里,’address’ 键不存在于 person 字典中。 但是我们看到它已经添加了默认值None。

{
 'name': 'Alice', 
 'city': 'Portland', 
 'interest': 'Programming', 
 'profession': 'Developer', 
 'address': None 
}

我们现在可以将“地址”键设置为某个地址:

>>> 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——但不将键添加到字典中。
  修复您无法发送消息的 Microsoft Teams 错误

您还可以在 Python 中使用 defaultdict 来更好地处理 KeyErrors。

使用 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'

当我们弹出对应于键“爱好”的项目时,我们看到它不再存在于字典中。

>>> 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() Returns a shallow copy of dict1setdefault()dict1.setdefault(key, default_value)——添加带有可选default_value的key作为dict1的key(未指定时,默认值为None)
– 返回 dict1[key] 如果键已经存在get()dict1.get(key,default_value)——返回dict1[key] 如果 key 存在于 dict1 中; 否则,返回 default_value
– 如果 dict1 中不存在键且未指定 default_value,则返回 Noneupdate()dict1.update(iterable1)使用 iterable1popitem()dict1.popitem() 中的键值对更新 dict1 并返回最后一个键值对dict1pop()dict1.pop(key)——取出并返回对应key的值:dict1[key]
– 如果键不存在于 dict1clear()dict1.clear()Deletes all items from dict1 中,则引发 KeyError

结论

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

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