练习 6.1:人
使用一个字典来存储一个人的信息,包括名、姓、年龄和居住的城市。该字典应包含键 first_name、last_name、age 和 city。将存储在该字典中的每项信息都打印出来。
61_person.py
person = {"first_name": "John", "last_name": "Brown", "age": 22, "city": "London"}print(person)print(person["first_name"])print(person["last_name"])print(person["age"])print(person["city"])
练习 6.2:喜欢的数 1
使用一个字典来存储一些人喜欢的数。请想出 5 个人的名字,并将这些名字用作字典中的键。再想出每个人喜欢的一个数,并将这些数作为值存储在字典中。打印每个人的名字和喜欢的数。为了让这个程序更有趣,通过询问朋友确保数据是真实的。
62_favorite_number.py
favorite_numbers = {"alice": 0, "bob": 9, "cindy": 42, "john": 50, "sarah": 255}print(f"alice's favorite number is {favorite_numbers['alice']}.")print(f"bob's favorite number is {favorite_numbers['bob']}.")print(f"cindy's favorite number is {favorite_numbers['cindy']}.")print(f"john's favorite number is {favorite_numbers['john']}.")print(f"sarah's favorite number is {favorite_numbers['sarah']}.")
练习 6.3:词汇表 1
Python 字典可用于模拟现实生活中的字典。为避免混淆,我们将后者称为词汇表。
- 想出你在前面学过的 5 个编程术语,将它们用作词汇表中的键,并将它们的含义作为值存储在词汇表中。
- 以整洁的方式打印每个术语及其含义。为此,既可以先打印术语,在它后面加上一个冒号,再打印其含义;也可以先在一行里打印术语,再使用换行符(\n)插入一个空行,然后在下一行里以缩进的方式打印其含义。
63_glossary.py
glossary = {"变量": "变量是可以被赋值的标签,也可以说变量指向特定的值","字符串": "字符串就是一系列字符","列表": "列表由一系列按特定顺序排列的元素组成。","元组": "不可变的列表称为元组","字典": "字典是一系列键值对。每个键都与一个值关联,可以使用键来访问与之关联的值。",}print(f"变量:{glossary['变量']}")print(f"字符串:{glossary['字符串']}")print(f"列表:{glossary['列表']}")print(f"元组:{glossary['元组']}")print(f"字典:{glossary['字典']}")
练习 6.4:词汇表 2
现在你知道了如何遍历字典,请整理你为练习 6.3 编写的代码,将其中的一系列函数调用 print() 替换为一个遍历字典中键和值的循环。确保该循环正确无误后,再在词汇表中添加 5 个 Python 术语。当你再次运行这个程序时,这些新术语及其含义将自动包含在输出中。
64_glossary_2.py
glossary = {"变量": "变量是可以被赋值的标签,也可以说变量指向特定的值","字符串": "字符串就是一系列字符","列表": "列表由一系列按特定顺序排列的元素组成。","元组": "不可变的列表称为元组","字典": "字典是一系列键值对。每个键都与一个值关联,可以使用键来访问与之关联的值。","条件测试": "值为 True 或 False 的表达式。","布尔表达式": "条件测试的别名,值为 True 或 False 的表达式。","浮点数": "带小数点的数。","常量": "常量是在程序的整个生命周期内都保持不变的变量。","注释": "注释让你能够使用自然语言在程序中添加说明。",}for key, value in glossary.items():print(f"{key}\n {value}")
练习 6.5:河流
创建一个字典,在其中存储三条河流及其流经的国家。例如,一个键值对可能是 'nile': 'egypt'。
- 使用循环为每条河流打印一条消息,如下所示。The Nile runs through Egypt.
65_rivers.py
rivers = {"Amazon River": "Brazil","Nile River": "Egypt","Yangtze River": "China",}# 键值对for key, value in rivers.items():print(f"The {key} runs through {value}")print("------------------------")# 键for key in rivers.keys():print(key)print("------------------------")# 值for value in rivers.values():print(value)
练习 6.6:调查
在 6.3.1 节编写的程序favorite_languages.py 中执行以下操作。
- 创建一个应该会接受调查的人的名单,其中有些人已在字典中,而其他人不在字典中。
- 遍历这个名单。对于已参与调查的人,打印一条消息表示感谢;对于还未参与调查的人,打印一条邀请参加调查的消息。
66_favorite_languages.py
favorite_languages = {"jen": "python","sarah": "c","edward": "rust","phil": "python",}names = ["alice", "jen", "edward", "bob", "phil"]for name in names:if name in favorite_languages.keys():print(f"{name}, 感谢您参与调查!")else:print(f"{name}, 请参加调查。")
练习 6.7:人们
在为练习 6.1 编写的程序中,再创建两个表示人的字典,然后将这三个字典都存储在一个名为 people 的列表中。遍历这个列表,将其中每个人的所有信息都打印出来。
67_people.py
person = {"first_name": "John", "last_name": "Brown", "age": 22, "city": "London"}person2 = {"first_name": "Sarah","last_name": "Williams","age": 40,"city": "New York",}person3 = {"first_name": "David", "last_name": "Miller", "age": 37, "city": "Paris"}people = [person, person2, person3]print(people)for p in people:for key, value in p.items():print(f"{key}::{value}")print("----------------------")
练习 6.8:宠物
创建多个表示宠物的字典,每个字典都包含宠物的类型及其主人的名字。将这些字典存储在一个名为 pets 的列表中,再遍历该列表,并将有关每个宠物的所有信息打印出来。
68_pets.py
pet1 = {"kind": "dog", "owner": "bob"}pet2 = {"kind": "cat", "owner": "cindy"}pet3 = {"kind": "bird", "owner": "john"}pets = [pet1, pet2, pet3]for pet in pets:for key, value in pet.items():print(f"{key}::{value}")print("-----------------------")
练习 6.9:喜欢的地方
创建一个名为 favorite_places 的字典。在这个字典中,将三个人的名字用作键,并存储每个人喜欢的 1~3 个地方。为让这个练习更有趣些,让一些朋友说出他们喜欢的几个地方。遍历这个字典,并将其中每个人的名字及其喜欢的地方打印出来。
69_favorite_places.py
favorite_places = {"alice": ["London", "Paris"],"bob": ["Rome", "Paris", "Beijing"],"cindy": ["New York"],}for name, places in favorite_places.items():print(f"{name.title()}'s favorite places:")for p in places:print(p, end=" ")print("\n-----------------------")
练习 6.10:喜欢的数 2
修改为练习 6.2 编写的程序,让每个人都可以有多个喜欢的数字,然后将每个人的名字及其喜欢的数打印出来。
610_favorite_numbers.py
favorite_numbers = {"alice": [0],"bob": [4, 9, 16, 25, 36],"cindy": [42, 90],"john": [50, 100, 150, 200],"sarah": [255, 1023],}for name, numbers in favorite_numbers.items():print(f"{name.title()}'s favorite numbers: ")for n in numbers:print(f"\t{n}")print("*************************")
练习 6.11:城市
创建一个名为 cities 的字典,将三个城市名用作键。对于每座城市,都创建一个字典,并在其中包含该城市所属的国家、人口约数以及一个有关该城市的事实。表示每座城市的字典都应包含 country、population 和 fact 等键。将每座城市的名字以及相关信息都打印出来。
611_cities.py
cities = {"Beijing": {"country": "PRC", "population": 2180_0000, "fact": "北京"},"New York": {"country": "US", "population": 825_0000, "fact": "纽约"},"London": {"country": "UK", "population": 883_0000, "fact": "伦敦"},}for key, value in cities.items():print(f"{key}: ")for k, v in value.items():print(f"\t{k}::{v}")
注:人口数据来源于网络,可能与实际存在偏差。
练习 6.12:扩展
本章的示例足够复杂,能以很多方式进行扩展。请对本章的一个示例进行扩展:添加键和值,调整程序要解决的问题,或改进输出的格式。
612_extensions.py
# aliens.pyalien_0 = {"color": "green", "points": 5}alien_1 = {"color": "yellow", "points": 10}alien_2 = {"color": "red", "points": 15}aliens = {"a0": alien_0, "a1": alien_1, "a2": alien_2}for k, alien in aliens.items():print(f"{k}:")for key, value in alien.items():print(f" {key}::{value}")