IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> ??全网最全python “万字!!字典”(建议收藏) -> 正文阅读

[Python知识库]??全网最全python “万字!!字典”(建议收藏)

第 6 章 字典
在这里插入图片描述

在本章中,你将学习能够将相关信息关联起来的 Python字典,以及如何访问和修改字典中的信息。字典可存储 的信息量几乎不受限制,因此我们会演示如何遍历字典中的数 据。另外,你还将学习存储字典的列表、存储列表的字典和存 储字典的字典。

理解字典后,就能够更准确地为各种真实物体建模。你可以创 建一个表示人的字典,然后想在其中存储多少信息就存储多少 信息:姓名、年龄、地址、职业,以及能描述他的任何方面。 你还能够存储任意两种相关的信息,如一系列单词及其含义, 一系列人名及其喜欢的数,以及一系列山脉及其海拔,等等。
6.1 一个简单的字典

来看一个包含外星人的游戏,这些外星人的颜色和分数各不相同。 下面是一个简单的字典,存储了有关特定外星人的信息:

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

print(et_0['color'])
print(et_0['points'])

与大多数编程概念一样,要熟练使用字典,也需要一段时间的练 习。使用字典一段时间后,你就会明白为何它们能够高效地模拟现 实世界中的情形
6.2 使用字典

在Python中,字典 是一系列键值对 。每个键 都与一个值相关联, 你可使用键来访问相关联的值。与键相关联的值可以是数、字符 串、列表乃至字典。事实上,可将任何Python对象用作字典中的 值。

在Python中,字典用放在花括号({} )中的一系列键值对表示,如 前面的示例所示:

python
et_0 = {'color': 'green', 'points': 5}

`

这个字典只存储了一项有关alien_0 的信息,具体地说是这个外星 人的颜色。在该字典中,字符串’color’ 是一个键,与之相关联的 值为’green’ 。
6.2.1 访问字典中的值

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

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

print(et_0['color'])
green
et_0 = {'color': 'green', 'points': 5}

new_points = et_0['points']
print(f"You just earned {new_points} points!")
结果:You just earned 5 points!

6.2.2 添加键值对

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

下面来在字典alien_0 中添加两项信息:外星人的 坐标和 坐 标,让我们能够在屏幕的特定位置显示该外星人。我们将这个外星 人放在屏幕左边缘,且离屏幕顶部25像素的地方。由于屏幕坐标系 的原点通常为左上角,要将该外星人放在屏幕左边缘,可将 坐标 设置为0;要将该外星人放在离屏幕顶部25像素的地方,可将 坐标 设置为25,如下所示:

et_0 = {'color': 'green', 'points': 5}
print(et_0)

et_0['x_position'] = 0
et_0['y_position'] = 20
print(et_0)
结果:{'color': 'green', 'points': 5}
{'color': 'green', 'points': 5, 'x_position': 0, 'y_position': 20}

6.2.3 先创建一个空字典

在空字典中添加键值对有时候可提供便利,而有时候必须这样做。 为此,可先使用一对空花括号定义一个字典,再分行添加各个键值 对。例如,下面演示了如何以这种方式创建字典alien_0 :

et = {}
et['color'] = 'green'
et['points'] = 5
print(et)
结果:{'color': 'green', 'points': 5}

6.2.4 修改字典中的值

要修改字典中的值,可依次指定字典名、用方括号括起的键,以及 与该键相关联的新值。例如,假设随着游戏的进行,需要将一个外 星人从绿色改为黄色:

et = {}
et['color'] = 'green'
et['points'] = 5
print(f"The alien is {et['color']}.")
et['color'] = 'yellow'
print(f"The alien is now {et['color']}.")
结果:The alien is green.
The alien is now yellow.

来看一个更有趣的例子,对一个能够以不同速度移动的外星人进行 位置跟踪。为此,我们将存储该外星人的当前速度,并据此确定该 外星人将向右移动多远:

et = {'x': 0, 'y': 25, 'speed': 'medium'}
print(f"Original position: {et['x']}")
# 向右移动外星人。 # 根据当前速度确定将外星人向右移动多远。

if et['speed'] == 'slow':
    x_increment = 1
elif et['speed'] == 'medium':
    x_increment = 2
else:
    # 这个外星人的移动速度肯定很快。
    x_increment = 3
et['x'] += x_increment
print(f"New postion: ({et['x']}, {et['y']})")
结果:Original position: 0
New postion: (2, 25)

6.2.5 删除键值对

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

例如,下面的代码从字典alien_0 中删除键’points’ 及其值:

et = {'x': 0, 'y': 25, 'speed': 'medium'}
print(et)
x = et['x']
del x
print(et)
结果:{'x': 0, 'y': 25, 'speed': 'medium'}
{'x': 0, 'y': 25, 'speed': 'medium'}
a = [1,2]
b = a
del a
print(b)
结果:[1, 2]

6.2.6 由类似对象组成的字典

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

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
}
language = favorite_languages['sarah'].title()
print(f"Sarah's favorite language is {language}.")
结果:Sarah's favorite language is C.

6.2.7 使用get() 来访问值

使用放在方括号内的键从字典中获取感兴趣的值时,可能会引发问 题:如果指定的键不存在就会出错。

如果你要求获取外星人的分数,而这个外星人没有分数,结果将如 何呢?下面来看一看:

et = {'x': 0, 'y': 25, 'speed': 'medium'}
print(et['point'])
结果:---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
/var/folders/61/c7zbwys51jx0f5_c9hl6jcfm0000gp/T/ipykernel_87809/587049669.py in <module>
      1 et = {'x': 0, 'y': 25, 'speed': 'medium'}
----> 2 print(et['point'])

KeyError: 'point'
et = {'x': 0, 'y': 25, 'speed': 'medium'}
print(et.get('point'))
print(et.get('point', 0))
结果:None
0

动手试一试
练习6-1:人

使用一个字典来存储一个熟人的信息,包括 名、姓、年龄和居住的城市。该字典应包含键first_name 、last_name 、age 和city 。将存储在该字典中的每项信息 都打印出来。

person = {
    "first_name": "三",
    "last_name": "张",
    'age': 18,
    "city": "XiAn"
}
for k,v in person.items():
    print(f"{k} is {v}.")
    结果:first_name is.
last_name is.
age is 18.
city is XiAn.

练习6-2:喜欢的数
使用一个字典来存储一些人喜欢的数。 请想出5个人的名字,并将这些名字用作字典中的键;找出每 个人喜欢的一个数,并将这些数作为值存储在字典中。打印每 个人的名字和喜欢的数。为了让这个程序更有趣,通过询问朋 友确保数据是真实的。

uckynumber = {
    "张三": 8,
    "里斯": 6
}
print(luckynumber['张三'])
结果:8

练习6-3:词汇表**

Python字典可用于模拟现实生活中的字 典。为避免混淆,我们将后者称为词汇表。

  • 想出你在前面学过的5个编程术语,将其用作词汇表中的 键,并将它们的含义作为值存储在词汇表中。
  • 以整洁的方式打印每个术语及其含义。为此,可先打印术 语,在它后面加上一个冒号,再打印其含义;也可在一行 打印术语,再使用换行符(\n )插入一个空行,然后在 下一行以缩进的方式打印其含义。
  • ` 6.3 遍历字典

一个Python字典可能只包含几个键值对,也可能包含数百万个键值 对。鉴于字典可能包含大量数据,Python支持对字典进行遍历。字 典可用于以各种方式存储信息,因此有多种遍历方式:可遍历字典 的所有键值对,也可仅遍历键或值。

6.3.1 遍历所有键值对

探索各种遍历方法前,先来看一个新字典,它用于存储有关网站用 户的信息。下面的字典存储一名用户的用户名、名和姓:`

user_0 = {
    'username': 'efermi',
    'first': 'enrico',
    'last': 'fermi',
}
for k,v in user_0.items():
    print(k, v)
    结果:username efermi
first enrico
last fermi
user_0 = {
    'username': 'efermi',
    'first': 'enrico',
    'last': 'fermi',
}
print(user_0.values())
结果:dict_values(['efermi', 'enrico', 'fermi'])

6.3.2 遍历字典中的所有键

在不需要使用字典中的值时,方法keys() 很有用。下面来遍历字 典favorite_languages ,并将每个被调查者的名字都打印出来:

user_0 = {
    'username': 'efermi',
    'first': 'enrico',
    'last': 'fermi',
}
for name in user_0.keys():
    print(name)
print('='*80)
for name in user_0:
    print(name)
    结果:username
first
last
================================================================================
username
first
last
favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
}
if 'erin' not in favorite_languages.keys():
    print("Erin, please take our poll!")

if 'phil' not in favorite_languages:
    print("phil, please take our poll!")

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

从Python 3.7起,遍历字典时将按插入的顺序返回其中的元素。不 过在有些情况下,你可能要按与此不同的顺序遍历字典。

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

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
}
for name in favorite_languages:
    print(name)
print('=' * 80)
for name in sorted(favorite_languages):
    print(name)

6.3.4 遍历字典中的所有值

如果主要对字典包含的值感兴趣,可使用方法values() 来返回一 个值列表,不包含任何键。例如,假设我们想获得一个列表,其中 只包含被调查者选择的各种语言,而不包含被调查者的名字,可以 这样做:

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
}
for val in favorite_languages.values():
    print(val)

集合set

x = [1,2,3,4,5,2,1,1,1,12]
print(list(set(x)))
结果:[1, 2, 3, 4, 5, 12]
x = {}
y = {'3': 23}
z = {None}
print(type(x), type(y), type(z))
结果:<class 'dict'> <class 'dict'> <class 'set'>

动手试一试
练习6-4:词汇表2

现在你知道了如何遍历字典,可以整理为 完成练习6-3而编写的代码,将其中的一系列函数调用print() 替换为一个遍历字典中键和值的循环。确定该循环正确无误 后,再在词汇表中添加5个Python术语。当你再次运行这个程 序时,这些新术语及其含义将自动包含在输出中。
练习6-5:河流

创建一个字典,在其中存储三条重要河流及 其流经的国家。例如,一个键值对可能是’nile’: ‘egypt’ 。

  • 使用循环为每条河流打印一条消息,下面是一个例子。
    The Nile runs through Egypt.

  • 使用循环将该字典中每条河流的名字打印出来。

  • 使用循环将该字典包含的每个国家的名字打印出来。

  • 练习6-6:调查

在6.3.1节编写的程序favorite_languages.py中 执行以下操作。

  • 创建一个应该会接受调查的人员名单,其中有些人已包含 在字典中,而其他人未包含在字典中。

  • 遍历这个人员名单。对于已参与调查的人,打印一条消息 表示感谢;对于还未参与调查的人,打印一条消息邀请他 参加。

  • 6.4 嵌套

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

6.4.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}

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

这些外星人都具有相同的特征,但在Python看来,每个外星人都是 独立的,这让我们能够独立地修改每个外星人。 在什么情况下需要处理成群结队的外星人呢?想象一下,可能随着 游戏的进行,有些外星人会变色且加快移动速度。必要时,可使 用for 循环和if 语句来修改某些外形人的颜色。例如,要将前三 个外星人修改为黄色、速度为中等且值10分,可这样做:

# 创建一个用于存储外星人的空列表。 
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[:3]:
    if alien['color'] == 'green':
        alien['color'] = 'yellow'
        alien['speed'] = 'medium'
        alien['points'] = 10
for alien in aliens[:5]:
    print(alien)
print("...")
结果:{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
...

6.4.2 在字典中存储列表

有时候,需要将列表存储在字典中,而不是将字典存储在列表中。 例如,你如何描述顾客点的比萨呢?如果使用列表,只能存储要添 加的比萨配料;但如果使用字典,就不仅可在其中包含配料列表, 还可包含其他有关比萨的描述。

在下面的示例中,存储了比萨的两方面信息:外皮类型和配料列 表。配料列表是一个与键’toppings’ 相关联的值。要访问该列 表,我们使用字典名和键’toppings’ ,就像访问字典中的其他值 一样。这将返回一个配料列表,而不是单个值:

# 存储所点比萨的信息。
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

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(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()}")
students = {
    "18100101": {
        "nickname": "zhangsan",
        "gender": "female",
        "birthyear": "1990",
        "currs": [
            {
                "id": "3435",
                "title": "Python",
                "timeposition": [
                    {
                        "startofweek": 1,
                        "endofweek": 16,
                        "dayofweek": 0,
                        "seq": "56",
                        "position": "J1-101"
                    },
                    {
                        "startofweek": 9,
                        "endofweek": 16,
                        "dayofweek": 3,
                        "seq": "78",
                        "position": "J1-101"
                    }
                ]
            }
        ]
     }
}

动手试一试
练习6-7:人们**

在为完成练习6-1而编写的程序中,再创建两 个表示人的字典,然后将这三个字典都存储在一个名 为people 的列表中。遍历这个列表,将其中每个人的所有信 息都打印出来。
练习6-8:宠物

创建多个表示宠物的字典,每个字典都包含 宠物的类型及其主人的名字。将这些字典存储在一个名为pets 的列表中,再遍历该列表,并将有关每个宠物的所有信息都打 印出来。
练习6-9:喜欢的地方

创建一个名为favorite_places 的 字典。在这个字典中,将三个人的名字用作键,并存储每个人 喜欢的1~3个地方。为了让这个练习更有趣些,可以让一些朋 友说出他们喜欢的几个地方。遍历这个字典,并将其中每个人 的名字及其喜欢的地方打印出来。
练习6-10:喜欢的数2

修改为完成练习6-2而编写的程序,让 每个人都可以有多个喜欢的数,然后将每个人的名字及其喜欢 的数打印出来。
练习6-11:城市

创建一个名为cities 的字典,将三个城市 名用作键。对于每座城市,都创建一个字典,并在其中包含该 城市所属的国家、人口约数以及一个有关该城市的事实。在表 示每座城市的字典中,应包含country 、population 和fact 等键。将每座城市的名字以及有关信息都打印出来。
6-12:扩展

本章的示例足够复杂,能以很多方式进行扩 展。请对本章的一个示例进行扩展:添加键和值、调整程序要 解决的问题或改进输出的格式。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-17 11:57:20  更:2021-10-17 11:57:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:01:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码