热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[Python]字典操作近两万字大总结(超详细教程)

本文主要介绍关于android,前端,后端的知识点,对【[Python]字典操作近两万字大总结(超详细教程)】和【python入门教程31个字典】有兴趣的朋友可以看下由【bluepad】投稿的技术文

本文主要介绍关于android,前端,后端的知识点,对【[Python] 字典操作近两万字大总结(超详细教程)】和【python入门教程31个字典】有兴趣的朋友可以看下由【bluepad】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的面试,学习路线,阿里巴巴相关技术问题。

python入门教程31个字典

?? 信仰:一个人走得远了,就会忘记自己为了什么而出发,希望你可以不忘初心,不要随波逐流,一直走下去
?? 欢迎关注??点赞??收藏??留言??
?? 本文由 原创,CSDN首发!
?? 系列专栏:Python学习
?? 首发时间:2022年5月12日
如果觉得博主的文章还不错的话,希望小伙伴们三连支持一下哦

导航小助手 1. 什么是字典2. 一个简单的字典3. 使用字典 3.1 访问字典中的值3.2 添加键-值对3.3 创建一个空字典3.4 修改字典中的值3.5 删除键—值对3.6 由类似对象组成的字典 4. 遍历字典 4.1 遍历所有的键—值对4.2 遍历字典中的所有键4.3 按顺序遍历字典中的所有键4.4 遍历字典中的所有值 5. 嵌套 5.1 字典列表5.2 在字典中存储列表5.3 在字典中存储字典 6. 小结 1. 什么是字典

字典是 Python 组合数据类型的一种,它能够将相关信息关联起来。字典可存储的信息量几乎不受限制。在学完字典后,你就能够更准确地为各种真实物体建模。你可以创建一个表示人的字典,然后想在其中存储多少信息就存储多少信息,比如姓名、年龄、地址、职业等等。你还能够存储任意两种相关的信息,如一系列单词及其含义,一系列人名及其专业,以及一系列山脉及其海拔等等。

2. 一个简单的字典

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

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

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

green
5

与大多数编程概念一样,要熟练使用字典,也需要一段时间的练习。使用字典一段时间后,你就会明白为何它们能够高效地模拟现实世界中的情形。

3. 使用字典

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

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

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

键-值对是两个相关联的值。指定键时,Python 将返回与之相关联的值。键和值之间用冒号分隔,而键—值对之间用逗号分隔。在字典中,你想存储多少个键-值对都可以。

最简单的字典只有一个键-值对,如下述修改后的字典 alien_0 所示:

alien_0 = {'color': 'green'}

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

3.1 访问字典中的值

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

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

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

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

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

现在,你可以访问外星人 alien_0 的颜色和点数。如果玩家射杀了这个外星人,你就可以使用下面的代码来确定玩家应获得多少个点:

alien_0 = {'color': 'green', 'points': 5}
new_points = alien_0['points']
print("You just earned " + str(new_points) + " points!")

上述代码首先定义了一个字典,然后从这个字典中获取与键 ‘points’ 相关联的值,并将这个值存储在变量 new_points 中。接下来,将这个整数转换为字符串,并打印一条消息,指出玩家获得了多少个点:

You just earned 5 points!

如果你在有外星人被射杀时都运行这段代码,就会获取该外星人的点数。

3.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, ‘x_position’: 0, ‘y_position’: 25}

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

3.3 创建一个空字典

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

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

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

{‘color’: ‘green’, ‘points’: 5}

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

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

来看一个更有趣的例子:对一个能够以不同速度移动的外星人的位置进行跟踪。为此,我们将存储该外星人的当前速度,并据此确定该外星人将向右移动多远:

alien_0 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
print("Original x-position: " + str(alien_0['x_position']))

# 向右移动外星人
# 据外星人当前速度决定将其移动多远
if alien_0['speed'] == 'slow':
    x_increment = 1
elif alien_0['speed'] == 'medium':
    x_increment = 2
else:
    x_increment = 3
    
# 新位置等于老位置加上增量
alien_0['x_position'] = alien_0['x_position'] + x_increment
print("New x-position: " + str(alien_0['x_position']))

首先我们定义了一个外星人,其中包含初始的 x 坐标和 y 坐标,还有速度 ‘medium’。出于简化考虑,我们省略了颜色和点数,但即便包含这些键-值对,这个示例的工作原理也不会有任何变化。我们还打印了 x_position 的初始值,旨在让用户知道这个外星人向右移动了多远。

然后,使用了一个 if-elif-else 结构来确定外星人应向右移动多远,并将这个值存储在变量 x_increment 中。如果外星人的速度为 ‘slow’,它将向右移动一个单位;如果速度为 ‘medium’,将向右移动两个单位;如果为 ‘fast’,将向右移动三个单位。确定移动量后,将其与 x_position 的当前值相加,再将结果关联到字典中的键 x_position

由于这是一个速度中等的外星人,因此其位置将向右移动两个单位:

Original x-position: 0
New x-position: 2

这种技术很棒:通过修改外星人字典中的值,可改变外星人的行为。例如,要将这个速度中等的外星人变成速度很快的外星人,可添加如下代码行:

alien_0['speed'] = fast 

这样,再次运行这些代码时,其中的 if-elif-else 结构将把一个更大的值赋给变量
x_increment

3.5 删除键—值对

对于字典中不再需要的信息,可使用 del 语句将相应的键-值对彻底删除。使用 del 语句时,必须指定字典名和要删除的键。

例如,下面的代码从字典 alien_0 中删除键 ‘points’ 及其值:

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

del alien_0[‘points’]Python 将键 ‘points’ 从字典 alien_0 中删除,同时删除与这个键相关联的值。输出表明,键 ‘points’ 及其值 5 已从字典中删除,但其他键-值对未受影响:

{‘color’: ‘green’, ‘points’: 5}
{‘color’: ‘green’}

注意:删除的键-值对永远消失了。

3.6 由类似对象组成的字典

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

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

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

定义好字典后,在最后一个键-值对的下一行添加一个右花括号,并缩进四个空格,使其与字典中的键对齐。另外一种不错的做法是在最后一个键-值对后面也加上逗号,为以后在下一行添加键-值对做好准备。

注意:对于较长的列表和字典,大多数编辑器都有以类似方式设置其格式的功能。对于较长的字典,还有其他一些可行的格式设置方式,因此在你的编辑器或其他源代码中,你可能会看到稍微不同的格式设置方式。

给定被调查者的名字,可使用这个字典轻松地获悉他喜欢的语言:

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
}
print("Sarah's favorite language is " +
	favorite_languages['sarah'].title() +
	".")

为获悉 Sarah 喜欢的语言,我们使用如下代码:

favorite_languages['sarah'] 

print 语句中,我们使用了 favorite_languages[‘sarah’].title() 这种语法输出了 Sarah 喜欢的语言:

Sarah’s favorite language is C.

这个示例还演示了如何将较长的 print 语句分成多行。单词 print 比大多数字典名都短,因此让输出的第一部分紧跟在左括号后面是合理的。请选择在合适的地方拆分要打印的内容,并在第一行末尾加上一个拼接运算符(+)。按回车键进入 print 语句的后续各行,并使用 Tab 键将它们对齐并缩进一级。指定要打印的所有内容后,在 print 语句的最后一行末尾加上右括号。

4. 遍历字典

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

4.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("
Key: " + key)
    print("Value: " + value)

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

for k, v in user_0.items() 

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

Key: username
Value: efermi

Key: first
Value: enrico

Key: last
Value: fermi

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

在前面的例子 favorite_languages 中,字典存储的是不同人的同一种信息;对于类似这
样的字典,遍历所有的键-值对很合适。如果遍历字典 favorite_languages,将得到其中每个人的姓名和喜欢的编程语言。由于其中的键都是人名,而值都是语言,因此我们在循环中使用变量 namelanguage,而不是 keyvalue,这让人更容易明白循环的作用:

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
}
for name, language in favorite_languages.items():
    print(name.title() + "'s favorite language is " +
          language.title() + ".")

上述代码中 for 循环让 Python 遍历字典中的每个键—值对,并将键存储在变量 name 中,而将值存储在变量 language 中。这些描述性名称能够让人非常轻松地明白 print 语句是做什么的。

仅使用几行代码,我们就将全部调查结果显示出来了:

Jen’s favorite language is Python.
Sarah’s favorite language is C.
Phil’s favorite language is Python.
Edward’s favorite language is Ruby.

即便字典存储的是上千乃至上百万人的调查结果,这种循环也管用。

4.2 遍历字典中的所有键

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

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

上述代码中 for 循环让 Python 提取字典 favorite_languages 中的所有键,并依次将它们存储到变量 name 中。输出了每个被调查者的名字:

Jen
Sarah
Phil
Edward

遍历字典时,会默认遍历所有的键,因此,如果将上述代码中的 for name in favorite_
languages.keys():
替换为 for name in favorite_languages:,输出将不变。

如果显式地使用方法 keys() 可让代码更容易理解,你可以选择这样做,但如果你愿意,也可省略它。

在这种循环中,可使用当前键来访问与之相关联的值。下面来打印两条消息,指出两位朋友喜欢的语言。我们像前面一样遍历字典中的名字,但在名字为指定朋友的名字时,打印一条消息,指出其喜欢的语言:

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

    if name in friends:
        print(" Hi " + name.title() +
              ", I see your favorite language is " +
              favorite_languages[name].title() + "!")

上述代码中,我们创建了一个列表,其中包含我们要通过打印消息,指出其喜欢的语言的朋友。在循环中,我们打印每个人的名字,并检查当前的名字是否在列表 friends 中。如果在列表中,就打印一句特殊的问候语,其中包含这位朋友喜欢的语言。为访问喜欢的语言,我们使用了字典名,并将变量 name 的当前值作为键。每个人的名字都会被打印,但只对朋友打印特殊消息:

Jen
Sarah
Hi Sarah, I see your favorite language is C!
Edward
Phil
Hi Phil, I see your favorite language is Python!

你还可以使用 keys() 确定某个人是否接受了调查。下面的代码确定 Erin 是否接受了调查:

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
}
if 'erin' not in favorite_languages.keys():
    print("Erin, please take our poll!")

方法 keys() 并非只能用于遍历;实际上,它返回一个列表,其中包含字典中的所有键,因此,代码中的 if 语句只是核实 ‘erin’ 是否包含在这个列表中。由于 ‘erin’ 并不包含在这个列表中,因此打印一条消息,邀请她参加调查:

Erin, please take our poll!

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

4.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
Ruby
Python

这种做法提取字典中所有的值,而没有考虑是否重复。涉及的值很少时,这也许不是问题,但如果被调查者很多,最终的列表可能包含大量的重复项。为剔除重复项,可使用集合(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:
Ruby
Python
C

随着你更深入地学习 Python,经常会发现它内置的功能可帮助你以希望的方式处理数据。

5. 嵌套

有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。你可以在列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典。正如下面的示例将演示的,嵌套是一项强大的功能。

5.1 字典列表

字典 alien_0 包含一个外星人的各种信息,但无法存储第二个外星人的信息,更别说屏幕上全部外星人的信息了。如何管理成群结队的外星人呢?一种办法是创建一个外星人列表,其中每个外星人都是一个字典,包含有关该外星人的各种信息。例如,下面的代码创建一个包含三个外星人的列表:

alien_0 = {'color': 'green', 'points': 5}
alien_1 = {'color': 'yellow', 'points': 10}
alien_2 = {'color': 'red', 'points': 15}
aliens = [alien_0, alien_1, alien_2]
for alien in aliens:
    print(alien)

我们首先创建了三个字典,其中每个字典都表示一个外星人。接着我们将这些字典都放到一个名为 aliens 的列表中。最后,我们遍历这个列表,并将每个外星人都打印出来:

{‘color’: ‘green’, ‘points’: 5}
{‘color’: ‘yellow’, ‘points’: 10}
{‘color’: ‘red’, ‘points’: 15}

更符合现实的情形是,外星人不止三个,且每个外星人都是使用代码自动生成的。在下面的示例中,我们使用 range() 生成了 30 个外星人:

aliens = []  # 创建一个用于存储外星人的空列表

# 创建30个绿色的外星人
for alien_number in range(30):
    new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
    aliens.append(new_alien)		#把外星人添加到列表里

# 显示前五个外星人
for alien in aliens[:5]:			
    print(alien)
print("...")

# 显示创建了多少个外星人
print("Total number of aliens: " + str(len(aliens)))

在这个示例中,首先创建了一个空列表,用于存储接下来将创建的所有外星人。接着,
我们使用 range() 返回一系列数字,其唯一的用途是告诉 Python 我们要重复这个循环多少次。每次执行这个循环时,都创建一个外星人,并将其附加到列表 aliens 末尾。然后,我们使用一个切片来打印前五个外星人。最后,打印列表的长度,以证明确实创建了 30 个外星人:

{‘color’: ‘green’, ‘points’: 5, ‘speed’: ‘slow’}
{‘color’: ‘green’, ‘points’: 5, ‘speed’: ‘slow’}
{‘color’: ‘green’, ‘points’: 5, ‘speed’: ‘slow’}
{‘color’: ‘green’, ‘points’: 5, ‘speed’: ‘slow’}
{‘color’: ‘green’, ‘points’: 5, ‘speed’: ‘slow’}

Total number of aliens: 30

这些外星人都具有相同的特征,但在 Python 看来,每个外星人都是独立的,这让我们能够独立地修改每个外星人。

在什么情况下需要处理成群结队的外星人呢?想象一下,可能随着游戏的进行,有些外星人会变色且移动速度会加快。必要时,我们可以使用 for 循环和 if 语句来修改某些外星人的颜色。

例如,要将前三个外星人修改为黄色的、速度为中等且值 10 个点,可以这样做:

# 创建一个用于存储外星人的空列表
aliens = []

# 创建30个绿色的外星人
for alien_number in range(0, 30):
    new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
    aliens.append(new_alien)

# 修改前3个外星人
for alien in aliens[0:3]:
    if alien['color'] == 'green':
        alien['color'] = 'yellow'
        alien['speed'] = 'medium'
        alien['points'] = 10

# 显示前5个外星人
for alien in aliens[0:5]:
    print(alien)
print("...")

鉴于我们要修改前三个外星人,需要遍历一个只包含这些外星人的切片。当前,所有外星人都是绿色的,但情况并非总是如此,因此我们编写了一条 if 语句来确保只修改绿色外星人。如果外星人是绿色的,我们就将其颜色改为 ‘yellow’,将其速度改为 ‘medium’,并将其点数改为 10,如下面的输出所示:

{‘color’: ‘yellow’, ‘points’: 10, ‘speed’: ‘medium’}
{‘color’: ‘yellow’, ‘points’: 10, ‘speed’: ‘medium’}
{‘color’: ‘yellow’, ‘points’: 10, ‘speed’: ‘medium’}
{‘color’: ‘green’, ‘points’: 5, ‘speed’: ‘slow’}
{‘color’: ‘green’, ‘points’: 5, ‘speed’: ‘slow’}

你可以进一步扩展这个循环,在其中添加一个 elif 代码块,将黄色外星人改为移动速度快且值 15 个点的红色外星人,如下所示(这里只列出了循环,而没有列出整个程序):

for alien in aliens[0:3]:
    if alien['color'] == 'green':
        alien['color'] = 'yellow'
        alien['speed'] = 'medium'
        alien['points'] = 10
    elif alien['color'] == 'yellow':
        alien['color'] = 'red'
        alien['speed'] = 'fast'
        alien['points'] = 15  

经常需要在列表中包含大量的字典,而其中每个字典都包含特定对象的众多信息。例如,你可能需要为网站的每个用户创建一个字典,并将这些字典存储在一个名为 users 的列表中。在这个列表中,所有字典的结构都相同,因此你可以遍历这个列表,并以相同的方式处理其中的每个字典。

5.2 在字典中存储列表

有时候,需要将列表存储在字典中,而不是将字典存储在列表中。例如,你如何描述顾客点的比萨呢?如果使用列表,只能存储要添加的比萨配料;但如果使用字典,就不仅可在其中包含配料列表,还可包含其他有关比萨的描述。

在下面的示例中,存储了比萨的两方面信息:外皮类型和配料列表。其中的配料列表是一个与键 ‘toppings’ 相关联的值。要访问该列表,我们使用字典名和键 ‘toppings’,就像访问字典中的其他值一样。这将返回一个配料列表,而不是单个值:

# 存储所点比萨的信息
pizza = {
    'crust': 'thick',
    'toppings': ['mushrooms', 'extra cheese'],
}

# 概述所点的比萨
print("You ordered a " + pizza['crust'] + "-crust pizza " +
      "with the following toppings:")
for topping in pizza['toppings']:
    print("	" + topping)

我们首先创建了一个字典,其中存储了有关顾客所点比萨的信息。在这个字典中,
一个键是 ‘crust’,与之相关联的值是字符串 ‘thick’;下一个键是 ‘toppings’,与之相关联的值是一个列表,其中存储了顾客要求添加的所有配料。制作前我们概述了顾客所点的比萨。为打印配料,我们编写了一个 for 循环。为访问配料列表,我们使用了键 ‘toppings’,这样 Python 将从字典中提取配料列表。

下面的输出概述了要制作的比萨:

You ordered a thick-crust pizza with the following toppings:
mushrooms
extra cheese

每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。在前面有关喜欢的编程语言的示例中,如果将每个人的回答都存储在一个列表中,被调查者就可选择多种喜欢的语言。在这种情况下,当我们遍历字典时,与每个被调查者相关联的都是一个语言列表,而不是一种语言;因此,在遍历该字典的 for 循环中,我们需要再使用一个 for 循环来遍历与被调查者相关联的语言列表:

favorite_languages = {
    'jen': ['python', 'ruby'],
    'sarah': ['c'],
    'edward': ['ruby', 'go'],
    'phil': ['python', 'haskell'],
}

for name, languages in favorite_languages.items():
    print("
" + name.title() + "'s favorite languages are:")
    for language in languages:
        print("	" + language.title())

正如你看到的,现在与每个名字相关联的值都是一个列表。请注意,有些人喜欢的语言只有一种,而有些人有多种。遍历字典时,我们使用了变量 languages 来依次存储字
典中的每个值,因为我们知道这些值都是列表。在遍历字典的主循环中,我们又使用了一个 for 循环来遍历每个人喜欢的语言列表。现在,每个人想列出多少种喜欢的语言都可以:

**
Jen’s favorite languages are:
Python
Ruby

Sarah’s favorite languages are:
C

Edward’s favorite languages are:
Ruby
Go

Phil’s favorite languages are:
Python
Haskell**

为进一步改进这个程序,可在遍历字典的 for 循环开头添加一条 if 语句,通过查看 len(languages) 的值来确定当前的被调查者喜欢的语言是否有多种。如果他喜欢的语言有多种,就像以前一样显示输出;如果只有一种,就相应修改输出的措辞,如显示 Sarah’s favorite language is C

注意:列表和字典的嵌套层级不应太多。如果嵌套层级比前面的示例多得多,很可能有更简单的解决问题的方案。

5.3 在字典中存储字典

可在字典中嵌套字典,但这样做时,代码可能很快复杂起来。例如,如果有多个网站用户,每个都有独特的用户名,可在字典中将用户名作为键,然后将每位用户的信息存储在一个字典中,并将该字典作为与用户名相关联的值。在下面的程序中,对于每位用户,我们都存储了其三项信息:名、姓和居住地;为访问这些信息,我们遍历所有的用户名,并访问与每个用户名相关联的信息字典:

users = {
    'aeinstein': {
        'first': 'albert',
        'last': 'einstein',
        'location': 'princeton',
    },
    'mcurie': {
        'first': 'marie',
        'last': 'curie',
        'location': 'paris',
    },
}
for username, user_info in users.items():
    print("
Username: " + username)
    full_name = user_info['first'] + " " + user_info['last']
    location = user_info['location']

    print("	Full name: " + full_name.title())
    print("	Location: " + location.title())

我们首先定义了一个名为 users 的字典,其中包含两个键:用户名 ‘aeinstein’ 和 ‘mcurie’;与每个键相关联的值都是一个字典,其中包含用户的名、姓和居住地。在处,我们遍历字典 users,让 Python 依次将每个键存储在变量 username 中,并依次将与当前键相关联的字典存储在变量 user_info 中。在主循环内部,我们将用户名打印出来。

for 循环中,我们访问内部的字典。变量 user_info 包含用户信息字典,而该字典包含三个键:‘first’、‘last’ 和 ‘location’;对于每位用户,我们都使用这些键来生成整洁的姓名和居住地,然后打印有关用户的简要信息:

**
Username: aeinstein
Full name: Albert Einstein
Location: Princeton

Username: mcurie
Full name: Marie Curie
Location: Paris**

请注意,表示每位用户的字典的结构都相同,虽然 Python 并没有这样的要求,但这使得嵌套的字典处理起来更容易。倘若表示每位用户的字典都包含不同的键,for 循环内部的代码将更复杂。

6. 小结

本文介绍了:如何定义字典,以及如何使用存储在字典中的信息;如何访问和修改字典中的元素,以及如何遍历字典中的所有信息;如何遍历字典中所有的键-值对、所有的键和所有的值;如何在列表中嵌套字典、在字典中嵌套列表以及在字典中嵌套字典。这些都是基础,为我们后面写出美妙的代码做铺垫,一起加油吧

[Python] 字典操作近两万字大总结(超详细教程)

??这次的分享就到这里啦
??有出错的地方欢迎在评论区指出来,共同进步,谢谢啦

本文《[Python] 字典操作近两万字大总结(超详细教程)》版权归bluepad所有,引用[Python] 字典操作近两万字大总结(超详细教程)需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • 探讨Redis的最佳应用场景
    本文将深入探讨Redis在不同场景下的最佳应用,包括其优势和适用范围。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • poj 3352 Road Construction ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 如何将Python与Excel高效结合:常用操作技巧解析
    本文深入探讨了如何将Python与Excel高效结合,涵盖了一系列实用的操作技巧。文章内容详尽,步骤清晰,注重细节处理,旨在帮助读者掌握Python与Excel之间的无缝对接方法,提升数据处理效率。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • Python编程中条件控制下的循环终止机制详解 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 本文对比了杜甫《喜晴》的两种英文翻译版本:a. Pleased with Sunny Weather 和 b. Rejoicing in Clearing Weather。a 版由 alexcwlin 翻译并经 Adam Lam 编辑,b 版则由哈佛大学的宇文所安教授 (Prof. Stephen Owen) 翻译。 ... [详细]
  • 探讨如何在Go语言中高效地处理大规模切片的去重操作,特别是针对百万级数据量的场景。 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
author-avatar
zcr2016
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有