《Python编程从入门到实践》06字典
要掌握的内容:
能够将相关信息关系起来的python字典,能更准确的给个种真实物体建模。
- 访问和修改
- 遍历字典中存储数据
- 存储字典的列表
- 存储列表的字典
- 存储字典的字典
6.1 一个简单的字典
#存储外星人的信息
alien_0 = { 'color':'green','points':'5'}
print(alien_0['color'])
print(alien_0['points']
字典能高效的模拟现实世界中的情形
6.2 使用字典
字典是一系列键-值对,每一个键都与一个值相关联,用键来访问与之相连的值,与键关联的值可以是数字,字符串,列表或是字典,可将python对象作为字典中的值.
- 在python中字典用{ }表示 (列表[ ])
alien_0 = { 'color':'green','points':'5'}
字典没有限制存储的个数
6.2.1 访问字典中的值
要获取与键先关联的值,可以依次指定字典名和放在方括号内的键,如下所示:
alien_0 = {'color':'green'}
print(alien_0['color'])
若想访问alien_0的颜色和点数,如果玩家猎杀了这个外星人,可以用以下代码获取玩家获得点数
alien_0 = { 'color':'green','points':'5'}
new_points = alien_0['points']
#注意必要的空格
print("you just earn " + str(new_points) + " points!")
6.2.2 添加键-值对
- 字典是一种动态结构,可以随时添加键值对(直接在后面写上字典名和要添加的键)
alien_0 = { 'color':'green','points':'5'}
print(alien_0)
alien_0['x_position'] = 0
alien_0['y_position'] = 12
print(alien_0)
{‘color’: ‘green’, ‘points’: ‘5’}
{‘color’: ‘green’, ‘points’: ‘5’, ‘x_position’: 0, ‘y_position’: 12}
- 注意 : Python中键值对的添加顺序不关心,而是在意键和值之间的关联
6.2.3 先创建一个空字典
- 原因: 为了方便
- 当使用字典来存储用户提供的数据或在编写能自动生成大量键-值对的代码时,通常需要定义一个空字典
#例子
alien_0 = {}
alien_0['color'] = 'red'
alien_0['points'] = 5
print(alien_0)
{‘color’: ‘red’, ‘points’: 5}
6.2.4 修改字典中的值
- 直接给键赋新值
# 以不同速度移动的外星人的位置进行跟踪,记录当前速度,以确定该外星人将向右移多远
alien_0 = {'x_position':0,'y_position':25,'speed': 'medium'}
print("Original x_position: " + str(alien_0['x_position']))
#向右移动外星人
#据外星人当前速度决定将其移动多远
if alien_0['speed'] == 'slow':
x_increment = 1
elif alien_0['speed'] == 'medium':
x_increment = 2
else:
x_increment = 3
#新位置等于当前位置加上增量
alien_0['x_position'] = alien_0['x_position'] + x_increment
print("New x_position : "+ str(alien_0['x_position']))
Original x_position: 0
New x_position : 2
- 通过修改字典,改变外星人的行为
6.2.5 删除键-值对
- 彻底删除 del
del alien_0['points']
6.2.6 由类似对象组成的字典
- 字典可以存储一个对象的多种信息,同时也可以存储多个对象的同一信息
#大家最爱的编程语言
favorite_language = {
'jen' : 'python',
'lisa':'c',
'ming':'python',
'sarah':'ruby',
}
6.3 遍历字典
6.3.1 遍历所有键值对
. items():
user_0 = {
'uesrname':'penny',
'first':'enrico',
'last':'fermi',
}
for key,value in user_0.items():
print("\nKey: " + key)
print("\nValue: " + value)
Key: uesrname
Value: penny
Key: first
Value: enrico
Key: last
Value: fermi
6.3.2 遍历字典中所有键
favorite_language = {
'jen' : 'python',
'lisa':'c',
'ming':'python',
'sarah':'ruby',
}
for name in favorite_language.keys():
# for name in favorite_langages:
print(name.title())
Jen
Lisa
Ming
Sarah
-遍历字典时会遍历所有键
favorite_languages = {
'jen' : 'python',
'lisa':'c',
'ming':'python',
'sarah':'ruby',
}
friends = ['lisa','sarah']
for name in favorite_languages.keys():
print(name.title())
if name in friends:
print("Hi, " + name.title() + " I see your favorite language is "+
favorite_languages[name].title() +"!")
Jen
Lisa
Hi, Lisa I see your favorite language is C!
Ming
Sarah
Hi, Sarah I see your favorite language is Ruby!
- 方法keys()并非只能用于遍历,事实上,它返回了一个列表,其中包含字典中所有的键。
6.3.3 按顺序遍历字典中的所有键
favorite_languages = {
'jen' : 'python',
'lisa':'c',
'ming':'python',
'sarah':'ruby',
}
#对方法dictionary.keys()的结果调用了sorted()
for name in sorted(favorite_languages.keys()):
print(name.title()+ ",thank you for taking the poll."
6.3.4 遍历字典中所有值
- 使用方法values() , 它返回了一个列表,但不包含任何键
- 使用集合set,剔除重复项
favorite_languages = {
'jen' : 'python',
'lisa':'c',
'ming':'python',
'sarah':'ruby',
}
print("the following languages have been mentioned:")
#通过对包含重复元素对列表,使用set(),可让python找出列表中独一无二对元素,并使用这些元素来创建一个集合
for language in set(favorite_languages.values()):
print(language.title())
6.4 嵌套
- 系列字典存储在列表中,或将列表作为值存储在字典中
6.4.1 字典列表
如何管理成群结队的外星人呢?(目前还没有涉及类)
方法一:创建一个外星人列表,其中每个外星人都是一个字典
方法二:自动生成
#创建一个用于存储外星人的空列表
aliens = []
#创建30个粉红色的外星人
for alien_number in range(30):
new_alien = {'color':'pink'}
aliens.append(new_alien)
#现实前5个外星人
for alien in aliens[:5]:
print(alien)
print("...")
#显示创建了多少外星人
print("total number of aliens: " + str(len(aliens)))
6.4.2 在字典中存储列表
例如:如何描述顾客的披萨 ,列表只能存储要添加的披萨配料,但如果使用字典,就不仅可以在其中关联配料列表,还可以包含其他有关但披萨描述
favorite_languages = {
'jen' : ['python','c'],
'lisa':['c++','c'],
'ming':['python','c#'],
'sarah':['ruby','python'],
}
for name, languages in favorite_languages.items():
print("\n" + name.title() +"'s favorite languages are:")
for language in languages:
print("\t" + language.title())
Jen’s favorite languages are:
Python
C
Lisa’s favorite languages are:
C++
C
Ming’s favorite languages are:
Python
C#
Sarah’s favorite languages are:
Ruby
Python
6.4.3 在字典中存储字典
(会使得代码复杂)