Python学习笔记(六)------字典

本文介绍了Python字典的基本操作,包括创建、访问、修改和删除键值对。此外,还探讨了遍历字典的不同方式,如遍历所有键、值和键值对,并展示了如何按顺序遍历字典。字典在存储和处理数据时提供了灵活性,是Python编程中的重要数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 一个简单的字典

        来看一个游戏,其中包含一些外星人,这些外星人的颜色和点数各不相同。下面是一个简单的字典,存储了有关特定外星人的信息:

alien_0 = {'color': 'green', 'points': 5}
print(alien_0['color'])
print(alien_0['points'])

        字典 alien_0 存储了外星人的颜色和点数。使用两条 print 语句来访问并打印这些信息,如下所示:

green
5

2. 使用字典

        在 Python 中,字典 是一系列键 — 值对 。每个键 都与一个值相关联,你可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。事实上,可将任何 Python 对象用作字典中的值。

        在 Python 中,字典用放在花括号 {} 中的一系列键 — 值对表示,如前面的示例所示:

alien_0 = {'color': 'green', 'points': 5}

        键 — 值 对是两个相关联的值。指定键时, Python 将返回与之相关联的值。键和值之间用冒号分隔,而键 — 值对之间用逗号分隔。在字典中,你想存储多少个键 — 值对都可以。最简单的字典只有一个键 — 值对,如下述修改后的字典 alien_0 所示:

alien_0 = {'color': 'green'}

       这个字典只存储了一项有关 alien_0 的信息,具体地说是这个外星人的颜色。在这个字典中,字符串 'color' 是一个键,与之相关联的值为 'green' 。

2.1 访问字典中的值

       要获取与键相关联的值,可依次指定字典名和放在方括号内的键,如下所示:

alien_0 = {'color': 'green'}
print(alien_0['color'])

       这将返回字典 alien_0 中与键 'color' 相关联的值:

green

       字典中可包含任意数量的键 — 值对。例如,下面是最初的字典 alien_0 ,其中包含两个键 — 值对:

alien_0 = {'color': 'green', 'points': 5}

2.2 添加键-值对

       字典是一种动态结构,可随时在其中添加键 — 值对。要添加键 — 值对,可依次指定字典名、用方括号括起的键和相关联的值。下面在字典 alien_0 中添加两项信息:外星人的 x 坐标和 y 坐标,让我们能够在屏幕的特定位置显示该外星人。我们将这个外星人放在屏幕左边缘,且离屏幕上边缘 25 像素的地方。由于屏幕坐标系的原点通常为左上角,因此要将该外星人放在屏幕左边缘,可将 x 坐标设置为 0 ;要将该外星人放在离屏幕顶部 25 像素的地方,可将 y 坐标设置为 25 ,如下所示:

alien_0 = {'color': 'green', 'points': 5}
print(alien_0)
alien_0['x_position'] = 0
alien_0['y_position'] = 25
print(alien_0)

       我们首先定义了前面一直在使用的字典,然后打印这个字典,以显示其信息快照。在处,我们在这个字典中新增了一个键 — 值对,其中的键为 'x_position' ,而值为 0 。在处,我们重复这样的操作,但使用的键为 'y_position' 。打印修改后的字典时,将看到这两个新增的键 — 值对:

{'color': 'green', 'points': 5}
{'color': 'green', 'points': 5, 'y_position': 25, 'x_position': 0}

       这个字典的最终版本包含四个键 — 值对,其中原来的两个指定外星人的颜色和点数,而新增的两个指定位置。注意,键 — 值对的排列顺序与添加顺序不同。 Python 不关心键 — 值对的添加顺序,而只关心键和值之间的关联关系。

2.3 先创建一个空字典

       有时候,在空字典中添加键 — 值对是为了方便,而有时候必须这样做。为此,可先使用一对空的花括号定义一个字典,再分行添加各个键 — 值对。例如,下例演示了如何以这种方式创建字典 alien_0 :

alien_0 = {}
alien_0['color'] = 'green'
alien_0['points'] = 5
print(alien_0)

       这里首先定义了空字典 alien_0 ,再在其中添加颜色和点数,得到前述示例一直在使用的字典:

{'color': 'green', 'points': 5}

       使用字典来存储用户提供的数据或在编写能自动生成大量键 — 值对的代码时,通常都需要先定义一个空字典。

2.4 修改字典中的值

       要修改字典中的值,可依次指定字典名、用方括号括起的键以及与该键相关联的新值。例如,假设随着游戏的进行,需要将一个外星人从绿色改为黄色:

alien_0 = {'color': 'green'}
print("The alien is " + alien_0['color'] + ".")
alien_0['color'] = 'yellow'
print("The alien is now " + alien_0['color'] + ".")

       我们首先定义了一个表示外星人 alien_0 的字典,其中只包含这个外星人的颜色。接下来,我们将与键 'color' 相关联的值改为 'yellow' 。输出表明,这个外星人确实从绿色变成了黄色:

The alien is green.
The alien is now yellow.

2.5 删除键 — 值对

       对于字典中不再需要的信息,可使用 del 语句将相应的键 — 值对彻底删除。使用 del 语句时,必须指定字典名和要删除的键。
例如,下面的代码从字典 alien_0 中删除键 'points' 及其值:      

alien_0 = {'color': 'green', 'points': 5}
print(alien_0)
del alien_0['points']
print(alien_0)
{'color': 'green', 'points': 5}
{'color': 'green'}

2.6 由类似对象组成的字典

       在前面的示例中,字典存储的是一个对象(游戏中的一个外星人)的多种信息,但你也可以使用字典来存储众多对象的同一种信息。例如,假设你要调查很多人,询问他们最喜欢的编程语言,可使用一个字典来存储这种简单调查的结果,如下所示:

favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}

       正如你看到的,我们将一个较大的字典放在了多行中。其中每个键都是一个被调查者的名字,而每个值都是被调查者喜欢的语言。确定需要使用多行来定义字典时,在输入左花括号后按回车键,再在下一行缩进四个空格,指定第一个键 — 值对,并在它后面加上一个逗号。此后你再次按回车键时,文本编辑器将自动缩进后续键 — 值对,且缩进量与第一个键 — 值对相同。
       定义好字典后,在最后一个键 — 值对的下一行添加一个右花括号,并缩进四个空格,使其与字典中的键对齐。另外一种不错的做法是在最后一个键 — 值对后面也加上逗号,为以后在下一行添加键 — 值对做好准备。

3. 遍历字典

       一个 Python 字典可能只包含几个键 — 值对,也可能包含数百万个键 — 值对。鉴于字典可能包含大量的数据, Python 支持对字典遍历。字典可用于以各种方式存储信息,因此有多种遍历字典的方式:可遍历字典的所有键 — 值对、键或值。

3.1 遍历所有的键-值对

       探索各种遍历方法前,先来看一个新字典,它用于存储有关网站用户的信息。下面的字典存储一名用户的用户名、名和姓:

user_0 = {
'username': 'efermi',
'first': 'enrico',
'last': 'fermi',
}

       利用本章前面介绍过的知识,可访问 user_0 的任何一项信息,但如果要获悉该用户字典中的所有信息,该怎么办呢?可以使用一个 for 循环来遍历这个字典:

user_0 = {
'username': 'efermi',
'first': 'enrico',
'last': 'fermi',
}
for key, value in user_0.items():
    print("\nKey: " + key)
    print("Value: " + value)

       要编写用于遍历字典的 for 循环,可声明两个变量,用于存储键 — 值对中的键和值。对于这两个变量,可使用任何名称。下面的代码使用了简单的变量名,这完全可行:.

for k, v in user_0.items()

       for 语句的第二部分包含字典名和方法 items() ,它返回一个键 — 值对列表。接下来, for 循环依次将每个键 — 值对存储到指定的两个变量中。在前面的示例中,我们使用这两个变量来打印每个键及其相关联的值。第一条 print 语句中的 "\n" 确保在输出每个键 — 值对前都插入一个空行:

Key: last
Value: fermi
Key: first
Value: enrico
Key: username
Value: efermi

       注意,即便遍历字典时,键 — 值对的返回顺序也与存储顺序不同。 Python 不关心键 — 值对的存储顺序,而只跟踪键和值之间的关联关系。

3.2 遍历字典中的所有键

       在不需要使用字典中的值时,方法 keys() 很有用。下面来遍历字典 favorite_languages ,并将每个被调查者的名字都打印出来:

favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for name in favorite_languages.keys():
    print(name.title())

       遍历字典时,会默认遍历所有的键,因此,如果将上述代码中的 for name in favorite_languages.keys(): 替换为 for name in favorite_languages: ,输出将不变。
       如果显式地使用方法 keys() 可让代码更容易理解,你可以选择这样做,但如果你愿意,也可省略它。在这种循环中,可使用当前键来访问与之相关联的值。下面来打印两条消息,指出两位朋友喜欢的语言。我们像前面一样遍历字典中的名字,但在名字为指定朋友的名字时,打印一条消息,指出其喜欢的语言:

Jen
Sarah
Phil
Edward

3.3 按顺序遍历字典中的所有键

       字典总是明确地记录键和值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的。这不是问题,因为通常你想要的只是获取与键相关联的正确的值。要以特定的顺序返回元素,一种办法是在 for 循环中对返回的键进行排序。为此,可使用函数 sorted() 来获得按特定顺序排列的键列表的副本:

favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for name in sorted(favorite_languages.keys()):
print(name.title() + ", thank you for taking the poll.")

       这条 for 语句类似于其他 for 语句,但对方法 dictionary.keys() 的结果调用了函数 sorted() 。这让 Python 列出字典中的所有键,并在遍历前对这个列表进行排序。输出表明,按顺序显示了所有被调查者的名字:

Edward, thank you for taking the poll.
Jen, thank you for taking the poll.
Phil, thank you for taking the poll.
Sarah, thank you for taking the poll.

3.4 遍历字典中的所有值

       如果你感兴趣的主要是字典包含的值,可使用方法 values() ,它返回一个值列表,而不包含任何键。例如,如果我们想获得一个这样的列表,即其中只包含被调查者选择的各种语言,而不包含被调查者的名字,可以这样做:

favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
print("The following languages have been mentioned:")
for language in favorite_languages.values():
print(language.title())

       这条 for 语句提取字典中的每个值,并将它们依次存储到变量 language 中。通过打印这些值,就获得了一个列表,其中包含被调查者选择的各种语言:

The following languages have been mentioned:
Python
C
Python
Ruby

       这种做法提取字典中所有的值,而没有考虑是否重复。涉及的值很少时,这也许不是问题,但如果被调查者很多,最终的列表可能包含大量的重复项。为剔除重复项,可使用集合( set )。集合 类似于列表,但每个元素都必须是独一无二的:

favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
print("The following languages have been mentioned:")
for language in set(favorite_languages.values()):
print(language.title())

       通过对包含重复元素的列表调用 set() ,可让 Python 找出列表中独一无二的元素,并使用这些元素来创建一个集合。我们使用 set() 来提取 favorite_languages.values() 中不同的语言。

       结果是一个不重复的列表,其中列出了被调查者提及的所有语言:

The following languages have been mentioned:
Python
C
Ruby

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值