Python 字典结构

1. 一个简单的字典

下面是一个简单的字典,存储了有关特定外星人的信息:

alien = {"color":"green","points":5}
print(alien["color"])
print(alien["point"])
# 结果
green
5

与大多数编程概念一样,要熟练使用字典,还需要一段时间的练习。

2. 使用字典

在 python 中,字典是一系列键值对。每个键都有一个值相关联,你可以使用键来访问相关联的值。与键相关联的值可以是数、字符串、列表乃至字典。事实上,可将任何 python 对象用作字典中的值。键值对是两个相关联的值,指定键时,python 将返回与之相关联的值。键和值之间用冒号分隔,而键值对之间用逗号分隔。在字典中,想储存多少键值对都可以,最简单的字典只有一个键值对,如下所示:

alien = {"color":"green"}

2.1 访问字典中的值

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

alien = {"color":"green"}
print(alien["color"])

2.2 添加键值对

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

alien = {"color":"green","points":5}
print(alien)
alien["x_position"] = 0
alien["y_position"] = 25
print(alien)

注意: 在 python3.7 以后,字典中元素的排序顺序与定义时相同。如果将字典打印出来或者遍历其元素,将发现元素的排列顺序与添加顺序相同。

2.3 先创建一个空字典

在空字典中添加键值对有时候可提供便利,而有时候必须这样做。为此可先使用一对空花括号定义一个字典,再分行添加各个键值对。如下所示:

alien = { }
alien["color"] = "green"
alien["point"] = 5
print(alien)

使用字典来储存用户提供的数据或在编写能自动生成大量键值对的代码时,通常需要先定义一个空字典。

2.4 修改字典中的值

要修改字典中的值,可依次指定字典名、用方括号括起来的键,以及与该键相关联的新值。如下所示:

alien = {"color":"green"}
print(f"The alien is {alien['color']}")
alien["color"] = "yellow"
print(f"the alien is now {alien['color']}")

来看一个更有趣的例子:

alien = {"x_position":0,"y_position":25,"speed":"medium"}
print(f"original position:{alien['x_position']}")
if alien["speed"] == "slow":
    x_increment = 1
elif alien["speed"] == "medium":
    x_increment = 2
else:
    x_increment = 3
alien["x_position"] = alien["x_position"] +x_increment
print(f"new position:{alen['x_position']}")

2.5 删除键值对

对于字典中不再需要的信息,可使用del语句将相应的键值对彻底删除。使用 del 语句时必须指定字典名和要删除的键。如下所示:

alien = {"color":"green","points":5}
print(alien)
del alien["points"]
print(alien)

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

2.6 由类似对象组成的字典

在前面的示例中,字典储存的是一个对象的多种信息,但你也可以使用字典来储存众多对象的同一种信息。例如,假设你要调查很多人,询问他们最喜欢的编程语言,可使用一个字典来储存这种简单的结果,如下所示:

favorite = {
    "jen":"python",
    "sarah":"c",
    "edward":"ruby",
    "phil":"python",
    }

当使用多行来定义字典时,要在输入左花括号后按回车键。在下一行缩进四个空格,指定第一个键值对,并在它后面加上一个逗号。此后再按回车键时,文本编辑器将自动缩进后续键值对,且缩进量与第一个键值对相同。定义好字典后,在最后一个键值对的下一行添加一个右花括号,并缩进四个空格,使之与字典中的键对齐。
注意: 对于较长的列表和字典,大多数编译器提供了以类似方式设置格式的功能。

2.7 使用get( )来访问值

使用放在方括号内的键从字典中获取感兴趣的值时,可能会引发问题,如果指定的键不存在就会出错。就字典而言,可使用方法 get( ) 在指定的键不存在时返回一个默认值,从而避免这样的错误。方法get( ) 的第一个参数用于指定键,是必不可少的;第二个参数为指定的键不存在时要返回的值,是可选的:

alien = {"color":"green","speed":"slow"}
point_value = alien.get("point","no point value assigned")
print(point_value)

注意: 调用 get( ) 时,如果没有指定第二个参数且指定的键不存在,python 将返回值 None。

3. 遍历字典

一个 python 字典可能只包含几个键值对,也可能包含数百个键值对。鉴于字典可能包含大量数据,python 支持对字典进行遍历。字典有多种遍历方式,可遍历字典的所有键值对,也可仅遍历键或值。

3.1 遍历所有键值对

先来看一个新字典,它用于储存有关网站用户的信息。下面的字典储存一名用户的用户名、名和姓:

user = {
     "username":"efermi",
     "first":"enrico",
     "last":"fermi",
     }
for key,value in user.items():
    print(f"\nkey:{key}")
    print(f"value:{value}")

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

3.2 遍历字典中所有的键

在不需要字典中的值的时候,方法keys( ) 很有用。下面来遍历字典:

languages = {
    "jen":"python",
    "sarah":"c",
    "edward":"ruby",
    "phil":"python",
    }
for name in languages.keys():
    print(name.title())

方法keys( )并非只能用于遍历,实际上它返回一个列表,其中包含字典中的所有键。
注意: 遍历字典时会默认遍历所有的键,因此使用方法 keys( ) 只是让代码更容易理解,可以省略它。

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

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

languages = {
    "jen":"python",
    "sarah":"c",
    "edward":"ruby",
    "phil":"python",
    }
for name in sorted(languages.keys()):
    print(f"{name.title()},thank you for taking the poll")

3.4 遍历字典中的所有值

可使用方法values( ) 来返回一个值列表,不包含任何键。如下所示:

languages = {
    "jen":"python",
    "sarah":"c",
    "edward":"ruby",
    "phil":"python",
    }
print("the following languages have been mentioned:")
for language in languages.values():
    print(language.title())

这种做法提取字典中所有的值,而没有考虑是否重复,最终的列表可能包含大量的重复项。为剔除重复项,可使用集合(set),集合中的每个元素都必须是独一无二的:

languages = {
    "jen":"python",
    "sarah":"c",
    "edward":"ruby",
    "phil":"python",
    }
print("the following languages have been mentioned:")
for language in set(languages.values()):
    print(language.title())

通过对包含重复元素的列表调用set( ),可让python找出列表中独一无二的元素,并使用这些元素创建一个集合。
注意: 可直接使用一对花括号创建集合,并在其中用逗号分隔元素:

languages = {"python","ruby","c","python"}

4. 嵌套

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

4.1 字典列表

字典 alien 包含一个外星人的各种信息,但无法储存第二个外星人的信息,更别说屏幕上全部外星人的信息了。如何管理成群结队的外星人呢?一种办法是创建一个外星人列表,其中每一个外星人都是一个字典,如下所示:

alien1 = {"color":"green","point":5}
alien2 = {"color":"yellow","point":10}
alien3 = {"color":"red","point":15}
aliens = [alien1,alien2,alien3]
for alien in aliens:
    print(alien)

4.2 在字典中储存列表

有时候,你需要将列表储存在字典中,而不是将字典储存在列表中,如下所示:

pizza = {
    "crust":"thick",
    "toppings":["mushrooms","extra cheese"]
    }
# 概述所点的披萨
print(f"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

如果函数调用 print( ) 中的字符串很长,可以在合适的位置分行。只需要在每行末尾都加上引号,同时对于除第一行外的其他各行,都在行首加上引号并缩进。
注意: 列表和字典的嵌套层级不应太多。如果嵌套层级比前面的示例多得多,可能有更简单的解决方法。

4.3 在字典中储存字典

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

users = {
    "aeinstein":{
        "first":"albet",
        "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()}")

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Litle_Pudding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值