10 个有用的 Python 字典方法
你想学习如何使用Python字典吗?本教程将介绍Python字典方法,以便读取、修改和执行其他常见操作。
我们将从回顾Python字典的基础知识开始,然后创建一个示例字典并使用Python字典方法对其进行修改。
让我们开始吧…
Python字典概述
Dictionaries 是Python中的内置数据结构。它允许你以键值对的形式存储项目,定义键和值之间的关联或映射。
字典中的键应该是唯一的(这样它们才能是hashable)。你可以使用键来查找值,或者使用内置方法(稍后会学到)。
创建Python字典时,你可以初始化所有的键值对,或者初始化一个空字典,然后添加键值对。
>>> dict1 = {'language':'Python','like':True}
>>> type(dict1)
# 或者我们可以这样做:
>>> dict1 = {}
>>> dict1['language']='Python'
>>> dict1['like']=True
常见操作的Python字典方法
注意:要运行代码示例,您需要安装Python 3.7或更高版本。
您可以在Python REPL中编写代码,或在Geekflare的online Python editor中进行跟随。
>>> 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 "", line 1, in
KeyError: 'age'
您可以通过使用内置的setdefault()
和get()
方法来避免此类错误,而不是像上面那样直接访问值。
setdefault(key)
方法返回dict['key']
,如果键在dict
中存在。
>>> 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'键的值时,由于该键存在于person
中,我们得到了'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)
方法将key
添加到字典中,并将val
设置为默认值。如果没有提供val
,则将key
添加到字典中并设置默认值为None
。dict.get(key,val)
方法从Python字典中返回与键对应的值。如果键不存在,则返回val
(如果提供)或者返回None
,但是不会将key
添加到字典中。
您也可以使用 defaultdict in Python 来更好地处理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)
返回与 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 "", line 1, in
KeyError: 'age'
在这里,由于 person 字典中不存在键 ‘age',我们遇到了 KeyError
异常。
与默认情况下删除最后一项的 list pop()
method 不同,字典的 pop()
方法 需要 一个键。如果在方法中未指定键,则会出现错误。
>>> person.pop()
跟踪(最近的调用最先发生):
文件“”,第1行,
类型错误:pop预期至少1个参数,但获取了0个
使用clear()方法删除所有字典项
字典的pop()和popitem()方法每次删除一个键值对。如果你想删除字典中的所有项,可以使用clear()方法。
>>> person.clear()
>>> person
{}
如上所示,调用clear()方法后,person字典中的所有键值对都被删除,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) |
– 将key及可选的default_value添加为dict1的键(当未指定时,默认值为None) – 如果key已经在dict1中存在,则返回dict1[key] |
get() | dict1.get(key,default_value) |
– 如果key在dict1中存在,则返回dict1[key]– 如果key不在dict1中,并且未指定default_value,则返回None |
update() | dict1.update(iterable1) |
用iterable1中的键值对更新dict1 |
popitem() | dict1.popitem() |
从dict1中移除并返回最后一个键值对 |
pop() | dict1.pop(key) |
– 移除并返回与key对应的值:dict1[key]– 如果key不在dict1中,会引发KeyError |
clear() | dict1.clear() |
删除dict1中的所有项 |
总结
你已经学会了如何使用常见的方法在Python字典上执行读取、更新和删除操作。此外,你还学会了如何使用get()方法和setdefault()方法来处理KeyError异常,通过返回默认值和向Python字典添加一个带有默认值的条目来处理。你还可以通过键或值对字典进行排序。
接下来,查看有用的链接列表。祝编码愉快!