本章中学习能够将相关信息关联起来的python字典。学习如何访问和修改字典中的信息、存储字典的列表、存储列表的字典和存储字典的字典等,从而为各种真实物体准确建模。
目录
一.一个简单示例
#字典alien_0存储了外星人的颜色和点数
>>> alien_0={"color":"green","points":5}
>>> print(alien_0["color"])
green
>>> print(alien_0["points"])
5
#1.访问字典
>>> new_points=alien_0["points"]
>>> print("you just earned"+str(new_points)+"points!")
you just earned5points!
>>> print("you just earned"+ str(new_points) +"points!")
you just earned5points!
>>> print("you just earned "+ str(new_points) +" points!")
you just earned 5 points!
#2.添加键-值对
>>> alien_0["x_position"]=0
>>> alien_0["y_position"]=25
>>> print(alien_0)
{'color': 'green', 'points': 5, 'x_position': 0, 'y_position': 25}
#3.修改字典中的值
>>> alien_0["color"]="yellow"
>>> print(alien_0["color"])
yellow
>>> print(alien_0)
{'color': 'yellow', 'points': 5, 'x_position': 0, 'y_position': 25}
#4.删除键值对
>>> del alien_0["x_position"]
>>> print(alien_0)
{'color': 'yellow', 'points': 5, 'y_position': 25}
python中,字典放在花括号{ }中,用一系列键-值对表示。键-值对是两个相关联的值。指定键时,Python将返回与之相关联的值。键和值之间用冒号分隔,而键-值对之间用逗号分隔。在字典中,你想存储多少个键-值对都可以。其中 str(new_points)将new_points变量的值转换为字符串类型。
你可以访问外星人alien_0的颜色和点数,如果玩家射杀了这个外星人,就可以使用代码确定玩家应该获得多少个点。键—值对的排列顺序与添加顺序可能不同。Python不关心键—值对的添加顺序,而只关心键和值之间的关联关系。
注意:注意print语句中在空格添加的位置,在str(new_points)前后添加空格是无效的,应该在双引号内添加对应空格。
二.遍历字典
1.遍历键和值
>>> alien_0={"color":"yellow","name":"nick","position":"active"}
>>> for key,value in alien_0.items():
... print("\nkey:"+key)
... print("value:"+value)
...
key:color
value:yellow
key:name
value:nick
key:position
value:active
编写遍历字典的for循环,声明两个变量用于存储键值对中的键和值;items() 函数以列表返回可遍历的(键, 值) 元组, 将字典中的键值对以元组存储,并将众多元组存在列表中。循环依次将每个键值对存储到指定的两个变量中。
注意:当键值对中的值是数字而不是字符串时,使用上述代码执行会报错,但是可以利用函数str()将其转换为字符串类型,实现正常输出,如下所示:
>>> alien_0={'points': 5, 'x_position': 0, 'y_position': 25}
>>> for key,value in alien_0.items():
... print("\nkey:"+key)
... print("value:"+value)
...
key:points
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
TypeError: can only concatenate str (not "int") to str
#利用函数str()解决数值型输出问题
>>> alien_0={'points': 5, 'x_position': 0, 'y_position': 25}
>>> for key,value in alien_0.items():
... print("\nkey:"+key)
... print("value:"+str(value))
...
key:points
value:5
key:x_position
value:0
key:y_position
value:25
2.遍历所有键
#遍历字典中的所有键
>>> alien_0={"color":"yellow","position":"active","name":"nick"}
>>> for name in alien_0.keys():
... print(name.title())
...
Color
Position
Name
#按顺序遍历字典中的所有键
>>> for name in sorted(alien_0.keys()):
... print(name.title())
...
Color
Name
Position
在不需要使用字典中的值时,使用方法keys(),它返回一个列表,其中包含字典中的所有键。for number in alien_0.keys():让python提取字典中的所有键,并依次将它们存储到变量number中。只需要声明一个变量用于存储键值对中的键。可使用函数sorted()在for循环中对返回的键进行排序,以特定的顺序返回元素。
3.遍历所有值
>>> for number in alien_0.values():
... print(str(number))
...
5
0
25
三.嵌套
有时需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。
1.在列表中存储字典
#首先创建三个字典,每个字典表示一个外星人,将这些字典都放在一个列表中。
>>> 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=[]
>>> for alien_number in range(30):
... new_alien={"color":"green","point":5,"speed":"slow"}
... aliens.append(new_alien)
...
>>> for alien in aliens[:5]:
... print(alien)
...print("...")
{'color': 'green', 'point': 5, 'speed': 'slow'}
{'color': 'green', 'point': 5, 'speed': 'slow'}
{'color': 'green', 'point': 5, 'speed': 'slow'}
{'color': 'green', 'point': 5, 'speed': 'slow'}
{'color': 'green', 'point': 5, 'speed': 'slow'}
...
>>> print("total number of aliens:"+str(len(aliens)))
total number of aliens:30
2.在字典中存储列表
当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。
>>> aliens={"color":"green","point":5,"speed":"slow","compose":["metal","earth"]}
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"]
... location=user_info["location"]
... print("\tfull name:"+full_name.title())
... print("\tlocation:"+location.title())
...
username:aeinstein
full name:Albert Einstein
location:Princeton
username:mcurie
full name:Marie Curie
location:Paris
首先定义了一个名为users的字典,其中包含两个键:用户名“aeinstein”和“mcurie”;与每个键相关联的值都是一个字典,其中包含用户的名、姓和居住地。for username,user_info in users.items():实现遍历字典users,让python依次将每个键存储在变量username中,并依次将与当前键相关联的字典存储在变量user_info中;print("\nusername:"+username)将用户名打印出来。full_name=user_info["first"]+" "+user_info["last"]及location=user_info["location"]处,开始访问内部的字典,变量user_info包含用户信息字典,该字典包含三个键:“first”、“last”和“location”。
注:本文主要参考《python编程:从入门到实践》(【美】Eric Matthes著 袁国忠 译)第三、四章内容。