你想学习如何使用 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() 方法而不是像上面那样访问值来避免此类错误。
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——但不将键添加到字典中。
您还可以在 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 列表方法列表。 编码愉快!