《Python编程:从入门到实践》 第八天

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

6.4.1 字典列表

管理成群结对对的外星人,可以创建外星人列表,其中每个外星人都是一个字典,包含有关外星人的各种信息。

 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("Total number of aliens: " + str(len(aliens)))

range()返回一系列数字,其唯一用途是告诉我们要重复这个循环多少次,每次执行这个循环的时候,都创建一个外星人,并将其附加到列表aliens的末尾。后续使用切片打印五个外星人。然后打印列表的长度,以证实确实创建了30多个外星人。
在Python看来,每个外星人都是独立可以修改的,用for循环和if语句实现。

#将前三个外星人修改为黄色的、速度为中等且值10个点,
#创建一个用于存储外星人的空列表
print("\n")
aliens = []
#创建30个绿色的外星人
for alien_number in range(30):
	new_alien = {'color':'green','points':5,'speed':'slow'}
	aliens.append(new_alien)
	
for alien in aliens[0:3]:
	if alien['color'] == 'green':
		alien['color'] = 'yellow'
		alien['speed'] = 'medium'
		alien['points'] = 10	
#显示前5个外星人
for alien in aliens[:5]:
	print(alien)
print("...")
#显示创建了多少外星人
print("Total number of aliens: " + str(len(aliens)))

你可以进一步扩展这个循环,在其中添加一个elif代码块

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

经常需要在列表中包含大量的字典,其中的字典都包含特定对象的众多信息。在这个列表中,所有的字典的结构都相同,因此可以遍历这个列表,并且以相同的方式处理其中的每个字典。

6.4.2 在字典中存储列表

#存储所点比萨的信息
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("\t" + topping)

每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。
#之前的程序员选择多种语句

#如果将每个人的回答都存储在一个列表中,被调查者就可选择多种喜欢的语言
#这种情况下遍历该字典的for循环中,需要再使用一个for循环来遍历与被调查者相关联的语言列表:
print("\n")
favorite_languages = {
	'jen':['python','ruby'],
	'sarch':['c'],
	'edward':['ruby','go'],
	'phil':['python','haskell'],
	}
for name,languages in favorite_languages.items():
	print("\n" + name.title() + "'s favorite languages are:")
	for language in languages:
		print("\t" + language.title())

在这里插入图片描述
可在遍历字典的for循环开头添加一条if语句,通过查看len(languages)的值来确定当前的被调查者喜欢的语言是否有多种。
列表和字典的嵌套层级不应太多。如果嵌套层级比前面的示例多得多,很可能有更简单的解决问题的方案。

6.4.3 在字典中存储字典
可在字典中嵌套字典,但这样做时,代码可能很快复杂起来。

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

请注意,表示每位用户的字典的结构都相同,虽然Python并没有这样的要求,但这使得嵌套的字典处理起来更容易。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值