考试停两天
有时候,需要将一系列字典存储在列表中,或将列表作为只存储在字典中,这称为嵌套。可以在列表中嵌套中字典,在字典中嵌套列表甚至在字典中嵌套字典。嵌套贼强了。
6.4.1字典列表
字典alien_0包含一个外星人的各种信息,但无法存储第二个外星人的信息,更别说屏幕上全部外星人的信息了。如何管理成群结队地外星人呢?一种办法是创建一个外星人列表,其中没一个外星人都是一个字典,包含有关该外星人的各种信息。例如,下面的代码创建一个包含三个外星人的列表:
alien_0 = {'color':'gree','pointa':5}
alien_1 = {'color':'yellow','pointa':10}
alien_2 = {'color':'red','pointa':15}
aliens = [alien_0,alien_1,alien_2]
for alien in aliens:
print(alien)
首先创建三个字典,其中每个字典都表示一个外星人,然后再将这些字典存储到一个名为 aliens的列表中,最后遍历这个列表,并将每个外星人都打印出来:
{'color': 'gree', 'pointa': 5}
{'color': 'yellow', 'pointa': 10}
{'color': 'red', 'pointa': 15}
更符合现实情况的是,外星人不止三个,且每个外星人都是代码自动生成的,在下面的示例中,使用range()生成30个外星人:
#创建一个存储外星人的空列表。
aliens = []
# 创建30个绿色的外星人
for alien_number in range(30):
new_alien = {'color':'gree', 'points':5, 'speed':'slow'}
aliens.append(new_alien)
#显示前5个外星人
for alien in range[:5]:
print(alien)
print("...")
# 显示创建了多少个外星人
print (f"toal number of aliens:{len(aliens)}")
在本例中,首先创建一个空列表,用于储存接下来将创建的所有外星人,range()返回一系列数,其唯一用途是告诉py要重复这个循环多少次。每次执行这个循环时,都会创建一个外星人,并将其附加到列表 aliens末尾,然后使用一个切片来打印前五个外星人,最后,打印列表的长度,以证明确实创建了30个外星人。
输出:
{'color': 'gree', 'points': 5, 'speed': 'slow'}
{'color': 'gree', 'points': 5, 'speed': 'slow'}
{'color': 'gree', 'points': 5, 'speed': 'slow'}
{'color': 'gree', 'points': 5, 'speed': 'slow'}
{'color': 'gree', 'points': 5, 'speed': 'slow'}
...
toal number of aliens:30
这些外星人都具有相同的特征,但在py看来,每个外星人都是互相独立的,让我们能够独立的修改每个外星人。
随着游戏的进行,我们需要处理成群结队的外星人,有些外外星人会变色且加快移动速度,必要时,可使用for 循环 和if 循环语句来修改某些外星人的颜色,例如要将前三个外星人修改为黄色,速度中等且值10分,可以这样做:
#创建一个存储外星人的空列表。
aliens = []
# 创建30个绿色的外星人
for alien_number in range(30):
new_alien = {'color':'gree', 'points':5, 'speed':'slow'}
aliens.append(new_alien)
for alien in aliens[:3]:
if alien['color']=='gree':
alien['color']= 'yellow'
alien['speed']= 'medium'
alien['points']= 10
#显示前五个外星人
for alien in aliens[: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': 'gree', 'points': 5, 'speed': 'slow'}
{'color': 'gree', 'points': 5, 'speed': 'slow'}
...
可进一步扩展这个循环,在其中添加一个 elif 代码块,将黄色外星人改为移动速度快且值15分的红色外星人,如下所示:
for alien in aliens[:3]:
if alien['color']=='gree':
alien['color']= 'yellow'
alien['speed']= 'medium'
alien['points']= 10
elif alien['color'] == 'yellow':
alien['color'] = 'red'
alien['speed']= 'fast'
alien['points']= 15
j经常需要在列表中包含大量的字典,而每个字典都包含特定对象的众多信息。
晚安啊