python学习笔记(九):字典嵌套

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

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)

输出结果为:

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

{'color': 'yellow', 'points': 10}

{'color': 'red', 'points': 15}

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

   更符合现实的情形是,外星人不止三个,且每个外星人都是使用代码自动生成的。在下面的示例中,我们使用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)))

输出结果为:

{'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

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

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("\t" + topping)

输出结果为:

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

    mushrooms

    extra cheese

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

   每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。注意,列表和字典的嵌套层级不应太多。

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']

    localtion = user_info['location']



    print("\nFull name: " + full_name.title())

    print("\tlocation: " + localtion.title())

输出结果为:

Username: aeinstein



Full name: Albert Einstein

        location: Princeton



Username: mcurie



Full name: Marie Curie

        location: Paris

   我们首先定义一个名为users的字典,其中包含两个键:用户名'aeinstein'和'mcurie';与每个键相关联的值都是一个字典,其中包含用户的名、姓和居住地。遍历字典users,让Python依次将每个键存储在变量username中,并依次将与当前键相关联的字典存储在变量user_info中。在主循环内部,我们将用户名打印出来。然后,我们开始访问内部的字典。变量user_info包含用户信息字典,而该字典包含三个键'first', 'last'和'location';对于每个用户,我们都使用这些键来生成整洁的姓名和居住地。最后打印有关用户的简要信息。

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值