python学习----------第五天(字典)

                                               字典

1、一个简单的字典

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

Alien_0存储量外星人的颜色和点数。

2、使用字典

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

在python中,字典用放在花括号{ }中的 一系列键-值对表示:

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

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

上例中‘color’是一个键,与之相关联的值为‘green’。

2.1访问字典中的值

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

如下:

Alien_0 = {‘color’:’green’}

Print(alien_0[‘color’]

2.2添加键-值对

字典是一种动态结构,可随时在其中添加键-值对。要添加键-值对,可依次指定字典名、用方括号括起来的键和相关联的值。

我们在字典alien_0中添加两项信息:外星人的x坐标和y坐标,让我们能在屏幕的特定位置显示该外星人。

打印修改后的字典,将看到两个新增的键值对。

此时这个字典共包含4个键-值对,其中原来的两个指定外星人的颜色和点数,新增的两个指定位置,

2.3先创建一个空字典

有时候,在空字典中添加键-值对是为了方便,而有时候必须这样做。为此,可先使用一对空的花括号定义一个字典,再分行添加各个键-值对。

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

2.4修改字典中的值

  要修改字典中的值,可依次指定字典名、用方括号括起的键以及该键相关联的值。

例如:需要将一个外星人从绿色改为黄色

注意:字典是用花括号,老是容易写成方括号

在游戏中,外星人需要移动,我们可以通过修改字典中的值来体现。

我们在字典中存储外星人的速度,并据此确定外星人将向右移动多远。

 

首先定义外星人,初始化它的x和y坐标,还有速度‘medium’,出于简化,省略了其他信息。使用if-elif-else结构来确定外星人移动了多远,并将这个变量存储在x_increment中,将其与当前的x_points相加,再将结果关联到字典中的键x_points。

当我们把speed改为fast:

此时外星人移动3距离

2.5删除键-值对

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

例如,从alien中删除键‘color’及值。

删除了键color及其对应的值,对其他的键值对没有影响。

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

2.6由类似对象组成的字典

前面的示例中,字典存储的是一个对象(外星人)的多种信息,但也可以用字典来存储众多对象的同一种信息。假设你调查很多人喜欢的编程语言,可使用一个字典来存储这种调查的结果。

 

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

定义好字典后在最后一对键-值对下一行添加一个有花括号,并缩进四个空格,使其与字典中的键对齐。

练习:使用一个字典存储一个熟人的信息,包括姓名,年龄和居住的城市。该字典应包含键first_name,last_name,city,age。

3、遍历字典

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

3.1遍历所有的键-值对

用于遍历字典的for循环,声明两个变量,用于存储键-值对中的键和值,对于这两个变量可以使用任何变量名。

For的第二部分包含字典名和方法items()它返回一个键-值对列表,接下来,for循环依次将每个键-值对存储到指定的两个变量中。

3.2遍历字典中的所有键

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

 

遍历字典时,会默认遍历所有的键,因此,如果将上述代码改为for name in favorite_languages:,输出将不变。显示的使用keys()让代码更容易理解。

方法keys()并非只用于遍历;实际上,它返回一个列表,其中包含字典中的所有键。

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

字典总是明确记录键和值之间的关联关系,但是获取字典的元素时,获取顺序是不可测的。这步是问题,因为通常你想要的值是获取与键相关联的正确的值。

要以特定的顺序返回元素,一种方法是在for循环中对返回的键进行排序,为此,可以使用函数sorted()来获取特定顺序排列的键列表的副本。

这条for语句对favorite_languages.keys()的结果调用了函数sorted()。让python列出字典中的所有键,并在遍历前对这个列表进行排序。

3.4遍历字典中的所有值

如果只是对字典中的值感兴趣,可使用方法values(),他返回一个值列表,而不包含任何键。

 

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

通过对包含重复元素的列表调用set(),可让python找出列表中独一无二的元素,并使用这些元素来创建一个集合。

练习:

创建一个字典,其中存储三条大河流及其流经的国家。其中一个键值对可能是‘nile’:’egypt’。

 使用循环为每条河流打印一条信息,如“The Nile runs through Egypt”。

使用循环将该字典中每条河流的名字都打印出来。

使用循环将该字典包含的每个国家的名字都打印出来。

4、嵌套

有时候需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。可以在列表中嵌套字典,在字典中嵌套列表,甚至在字典中嵌套字典。

4.1字典列表

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

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

4.2在字典中存储列表

有时候,需要将列表存储在字典中,而不是将字典存储在列表中。

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

 

我们首先创建了一个字典,存储了与披萨有关的信息。在这个字典中,一个键时‘crust’与之相关联的值是‘thick’;下一个键是‘topping’,与之相关联的是一个列表,其中存储了顾客要求添加的所有配料。

4.3在字典中存储字典

可在字典中嵌套字典,但是这样做,代码很快复杂起来。

如:有多个网站用户,可在字典中将用户名作为键,然后将每位用户的信息存储在一个字典中,并将该字典作为与用户名相关联的值。在下面程序中,对于每位用户,我们存储了其三项信息:名,姓和居住地址;为访问这些信息,我们遍历所有的用户名,并访问每个用户名相关联的信息字典。

猜你喜欢

转载自blog.csdn.net/qq_42159433/article/details/84065169