文章目录
一、python的嵌套
有时候需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。我们可以在列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典。
二、字典列表
还记得我们之前的外星人的例子吗,如果字典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)
输出结果:
更符合现实的情景是,外星人不止三个。且每个外星人都是使用代码自动生成的。
例:使用range()生成了30个外星人。
#创建一个用于存储外星人的空列表
aliens=[]
#创建30个绿色的外星人
for alien_number in range(30):
new_alien={'color':'green','points':5,'speed':'slow'}
aliens.append(new_alien)
#显示前5个外星人
for alien in aliens[:5]:
print(alien)
print("...")
#显示创建了多少个外星人
print(f"Total numbers of aliens:{len(aliens)}")
输出结果:
随着游戏的进行,有些外星人会变色且加快移动速度。必要时,可使用for循环和if语句来修改某些外星人的颜色。
例:要将前三个外星人修改为黄色、速度为中等且值10分。
#创建一个用于存储外星人的空列表
aliens=[]
#创建30个绿色的外星人
for alien_number in range(30):
new_alien={'color':'green','points':5,'speed':'slow'}
aliens.append(new_alien)
for alien in aliens[:3]:
if alien['color']=='green':
alien['color']='yellow'
alien['speed']='medium'
alien['points']=10
#显示前5个外星人
for alien in aliens[:5]:
print(alien)
print("...")
输出结果:
三、在字典中存储列表
有时候,需要将列表存储在字典中,而不是将字典存储在列表中。
比如说我们之前那个披萨店的例子,我们之前在学习列表时,用列表只能存储要添加的比萨配料;现在我们如果用字典的话,就不仅可在其中包含配料列表,还可包含其他有关披萨的描述。
例:在下面的代码中,能存储披萨的两方面信息:外皮类型和配料列表。配料列表是一个与键‘toppings’相关联的值。要访问该列表,我们使用字典名和键‘toppings’,就像访问字典中的其它值一样。这将返回一个配料列表,而不是单个值:
#存储所点比萨的信息
pizza={
'crust':'thick',
'toppings':['mushroom','extra cheese'],
}
#概述所点的比萨
print(f"You order a {pizza['crust']}-crust pizza"
"with the following toppings:")
for topping in pizza['toppings']:
print("\t" + topping)
输出结果:
当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。下面我们再做一个例子
例:调查人们喜欢的编程语言,如果调查者有多种喜欢的语言,就需要将回答放在列表中,接下来我们创建一个这样的嵌套(字典中嵌套列表)
favorite_languages = {
'jen':['python','ruby'],
'sarah':['c'],
'edward':['ruby','go'],
'phil':['python','haskell'],
}
for name,languages in favorite_languages.items():
print(f"\n{name.title()}'s favorite languages are:")
for language in languages:
print(f"\t{language.title()}")
输出结果:
五、在字典中存储字典
在字典中嵌套字典,这样代码可能开始复杂起来。例如,如果有多个网站用户,每个用户都有独特的用户名,可在字典中将用户名作为键,然后将每位用户的信息存储在一个字典中,并将该字典作为与用户名相关联的值。
例:下面的程序,存储了每位用户的三项信息:名、姓和居住地。为了访问这些信息,我们遍历所有的用户名,并访问与每个用户名相关联的字典。
users={
'aeinstein':{
'first':'albert',
'last':'einstein',
'location':'princeton',
},
'mcurie':{
'first':'marie',
'last':'curie',
'location':'paris',
},
}
for username,user_info in users.items():
print(f"\nUsername:{username}")
full_name=f"{user_info['first']} {user_info['last']}"
location=user_info['location']
print(f"\tFull name:{full_name.title()}")
print(f"\tLocation :{location.title()}")
输出结果: