字典
简单示例–外星人,存储一些外星人的信息
alien_0 = {'color': 'green','points': '5'}
print(alien_0['color'])
print(alien_0['points'])
##输出
green
5
使用字典
字典是一系列键值对-key-value。每一个键都和一个值相关联,你可以通过键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表、或者还是字典。
键与值之间用冒号分隔,每个键值对用逗号分隔。
访问字典中的值
可以直接用print输出
print(字典名['键名'])
也可以进行赋值后再输出
new_data = 字典名['键名']
print(new_data)
拿外星人字典举例–每个外星人都有与之对应的点数,如果把外星人击杀了就会显示你得到多少点
alien_0 = {'color': 'green','points': '5'}
print('你击杀了'+alien_0['color']+'获得了'+alien_0['points'])
##你还可以这样
alien_color=alien_0['color']
alien_point=alien_0['points']
print('你击杀了'+alien_color+'获得了'+alien_point)
添加键值对
字典是一种动态节后,可随时在其中添加键值对。要添加键值对,可依次指定字典名,用方括号括器键和关联的值。
要给外星人添加x坐标和y坐标,让它能够可以再屏幕特定位置显示该外星人
alien_0 = {'color': 'green','points': '5'}
print(alien_0)
alien_0['x_location'] = 0
alien_0['y_location'] = 0
print(alien_0)
##查看输出结果
#这是添加前的结果
{'color': 'green', 'points': '5'}
#添加后的结果
{'color': 'green', 'points': '5', 'x_location': 0, 'y_location': 0}
python可以先创建一个空字典再往空字典里面加内容
alien_1 = {}
alien_1['color'] = 'yellow'
alien_1['points']= 3
print(alien_1)
##执行
{'color': 'yellow', 'points': 3}
修改字典的值
aline_2 = {'color': 'green'}
print('这个外星人的颜色是'+aline_2['color'])
aline_2['color'] = 'red'
print('修改后外星人的颜色是'+aline_2['color'])
#执行
这个外星人的颜色是green
修改后外星人的颜色是red
现在我们定义外星人的移动速度,按照移动速度来判断外星人向右移动多远(medium:中等,slow:特别慢,fast:特别快)
aline_3 = {'x_location': 0, 'y_location': 15, 'speed': 'medium'}
#移动的位置
print(aline_3['x_location'])
#判读如果速度为中等,就向右移动2步
if aline_3['speed'] == 'medium':
aline_3['x_location'] += 2
#如果速度是很慢就移动一步
elif aline_3['speed'] == 'slow':
aline_3['x_location'] += 1
#如果特别快就移动4步
else:
aline_3['x_location'] += 4
#移动后的位置
print(aline_3['x_location'])
删除键值对
对于字典中不再需要的信息,可以使用del语句将键值对彻底删除
aline_4 = {'color': 'green', 'points': 5}
print(aline_4)
#删除
del aline_4['points']
#删除后输出
print(aline_4)
#执行
{'color': 'green', 'points': 5}
{'color': 'green'}
作业
使用一个字典来存储一个熟人的信息,包括名、姓、年龄和居住的城市。亥字典应包含键first_name、last_name、age和city。将存储在该字典中的每项信息都打印出来。
people = {'first_name': '谭', 'last_name': '畅', 'age': 18, 'city': '益阳'}
print('我姓'+people['first_name'])
print('名'+people['last_name'])
##应为输出要为字符串类型,使用str()函数来强转为字符串
print('年龄'+ str(people['age']))
print('来自'+people['city'])
##执行结果
我姓谭
名畅
年龄18
来自益阳
遍历字典
一个字典可能包成千上万个键值对。Python支持对字典单独遍历。
遍历所有的键值对
user_0 = {
'username': 'tom',
'like_color': 'red',
'like_food': 'apple'
}
#用for循环进行遍历
#items()函数是返回一个键值对的元组数组
for key,value in user_0.items():
#输出键
print("key:"+key)
#输出值
print("value:"+value)
##执行
key:username
value:tom
key:like_color
value:red
key:like_food
value:apple
遍历字典中的所有键
不需要字典中的值的时候使用keys()很有用
languages = {
'小明': 'java',
'小强': 'C',
'小红': 'Python'
}
##key()只提取键
for name in languages.keys():
print(name.title())
##执行后
小明
小强
小红
可以再创建一个新的列表,列表中存储朋友的名字,再加上if判断语句,如果遍历出来的值再列表中则输出一句话
languages = {
'小明': 'java',
'小强': 'C',
'小红': 'Python'
}
people = ['小红']
for name in languages.keys():
print(name.title())
##判断这个键是否存在于people列表,存在则输出一句话
if name in people:
print(name+' very like'+languages[name])
还可以判断某个人是否存在于字典
languages = {
'小明': 'java',
'小强': 'C',
'小红': 'Python'
}
if '小王' not in languages.keys():
print('小王没有被采访')
可以是用函数sorted来对字典进行按顺序遍历
languages = {
'tom': 'java',
'jen': 'C',
'gil': 'Python'
}
for name in sorted(languages.keys()):
print(name+',谢谢你能接受我的采访')
遍历所有值
可以使用values()来遍历字典中包含的值
languages = {
'tom': 'java',
'jen': 'C',
'gil': 'Python',
'pete': 'Go',
'lina': 'Ruby'
}
print("有一下编程语言:")
##提取值
for language in languages.values():
print(language)
##输出
java
C
Python
Go
Ruby
假如字典的值有多个重复的,但是你又不想看见那多重复的,可以使用set()集合,类似于列表,但是每个元素都必须是独一无二的。
languages = {
'tom': 'java',
'jen': 'C',
'gil': 'Python',
'pete': 'Python',
'lina': 'Python'
}
print("有一下编程语言:")
for language in set(languages.values()):
print(language)
##执行后
有一下编程语言:
Python
java
C
创建一个字典,在其中存储三条大河流及其流经的国家。其中一个键值对可能是'nile' : 'egypt '。
使用循环为每条河流都打印一条消息
使用循环将该字典中每条河流的名字都打印出来
使用循环将该字典包含的每个国家的名字都打印出来
totals = {
"nile": 'egypt',
'yangtze': 'china',
'amazon River': 'brazil'
}
for totals, country in totals.items():
print("这是"+totals+"河,"'它流经过'+country,)
###执行
这是nile河,它流经过egypt
这是yangtze河,它流经过china
这是amazon River河,它流经过brazil
嵌套
字典可以存储在字典内,列表也可以,甚至你可以在字典中嵌套字典,然后再嵌套字典,再嵌套字典……
字典列表
有时候你的字典里面只能存储一个人的信息,假如一个人一个字典,成千上万个字典,不好管理,所以就可以使用到字典列表,
##这里我就以之前外星人来举列
##定义了4个外星人
alien_0 = {'color': 'green', 'points': '5'}
alien_1 = {'color': 'red', 'point': '8'}
alien_2 = {'color': 'yellow', 'point': '6'}
alien_3 = {'color': 'blue', 'point': '10'}
##把外星人字典加入这个列表
aliens = [alien_0, alien_1, alien_2, alien_3]
for i in aliens:
print(i)
##执行
{'color': 'green', 'points': '5'}
{'color': 'red', 'point': '8'}
{'color': 'yellow', 'point': '6'}
{'color': 'blue', 'point': '10'}
假如外星人特别多,你不可能一个一个的打上去。所以他们都是随机生成的,我们使用range()来生成40个外星人试一下
##range(30) == range(0,30)
for i in range(30):
alien = {'num': i, 'color': 'green', 'points': '5', 'speed': 'slow'}
aliens.append(alien)
###打印出前10个外星人
for i in aliens[0:10]:
print(i)
print('...')
print('一共有'+str(len(aliens))+'个外星人')
##执行
{'num': 0, 'color': 'green', 'points': '5', 'speed': 'slow'}
{'num': 1, 'color': 'green', 'points': '5', 'speed': 'slow'}
{'num': 2, 'color': 'green', 'points': '5', 'speed': 'slow'}
{'num': 3, 'color': 'green', 'points': '5', 'speed': 'slow'}
{'num': 4, 'color': 'green', 'points': '5', 'speed': 'slow'}
{'num': 5, 'color': 'green', 'points': '5', 'speed': 'slow'}
{'num': 6, 'color': 'green', 'points': '5', 'speed': 'slow'}
{'num': 7, 'color': 'green', 'points': '5', 'speed': 'slow'}
{'num': 8, 'color': 'green', 'points': '5', 'speed': 'slow'}
{'num': 9, 'color': 'green', 'points': '5', 'speed': 'slow'}
...
一共有30个外星人
但是现在外星人都是一样,一般游戏中的外星人会有多个外星人,或者再游戏后期会出现其他的外星人,需要修改,可以通for循环和列表的切片来修改
##修改外星人数据
for i in range(30):
alien = {'num': i, 'color': 'green', 'points': '5', 'speed': 'slow'}
aliens.append(alien)
##修改前5个外星人
for i in aliens[0:5]:
##如果外星人颜色为绿色
if i['color'] == 'green':
i['color'] = 'red'
i['points'] = '8'
i['speed'] = 'medium'
###打印出前10个外星人
for i in aliens[0:10]:
print(i)
print('...')
print('一共有'+str(len(aliens))+'个外星人')
##执行后
{'num': 0, 'color': 'red', 'points': '8', 'speed': 'medium'}
{'num': 1, 'color': 'red', 'points': '8', 'speed': 'medium'}
{'num': 2, 'color': 'red', 'points': '8', 'speed': 'medium'}
{'num': 3, 'color': 'red', 'points': '8', 'speed': 'medium'}
{'num': 4, 'color': 'red', 'points': '8', 'speed': 'medium'}
{'num': 5, 'color': 'green', 'points': '5', 'speed': 'slow'}
{'num': 6, 'color': 'green', 'points': '5', 'speed': 'slow'}
{'num': 7, 'color': 'green', 'points': '5', 'speed': 'slow'}
{'num': 8, 'color': 'green', 'points': '5', 'speed': 'slow'}
{'num': 9, 'color': 'green', 'points': '5', 'speed': 'slow'}
...
一共有30个外星人
字典中存储列表
有时候你单单使用字典不行,需要再字典里面添加列表,比如三大河流流经的国家,这些国家可以凑成一个列表
rivers = {
'Nile': ['egypt', 'Rudawan', 'Uganda', 'Kenya', 'Sudan', 'Ethiopia'],
'Yangtze': 'China',
'Amazon': ['peru', 'colombia', 'brazil', 'Venezuela', 'Bolivia', 'Ecuador'],
}
for name, countrys in rivers.items():
print(name+'流经的国家有:')
if type(countrys) != list:
print('\t'+countrys)
else:
for country in countrys:
print('\t', country)
##执行
Nile流经的国家有:
egypt
Rudawan
Uganda
Kenya
Sudan
Ethiopia
Yangtze流经的国家有:
China
Amazon流经的国家有:
peru
colombia
brazil
Venezuela
Bolivia
Ecuador
字典里都可以存列表了,字典当然也可以存,我们可以在字典里面存储每用户的信息
users = {
'小明': {
'game_name': 'xiaomin',
'level': '10',
'game_day': '4'
},
'小强': {
'game_name': 'xiaoqiang',
'level': '100',
'game_day': '64'
}
}
for user, data in users.items():
user_game_name = data['game_name']
user_level = data['level']
user_game_day = data['game_day']
print(user+'玩这个游戏已经'+user_game_day+'天了,他的游戏名是'+user_game_name+'等级是'+user_level)
##执行
小明玩这个游戏已经4天了,他的游戏名是xiaomin等级是10
小强玩这个游戏已经64天了,他的游戏名是xiaoqiang等级是100
创建多个字典,对于每个字典,都使用一个宠物的名称来给它命名;在每个字典中,包含宠物的类型及其主人的名字。将这些字典存储在一个名为 pets 的列表中,再遍历该列表,并将宠物的所有信息都打印出来。
pet_0 = {'name': 'xiaohuang', 'owner': 'xiaohua', 'type': 'dog'}
pet_1 = {'name': 'xiaobai', 'owner': 'xiaoliu', 'type': 'cat'}
pets = [pet_0, pet_1]
for i in pets:
print(i)
##执行
{'name': 'xiaohuang', 'owner': 'xiaohua', 'type': 'dog'}
{'name': 'xiaobai', 'owner': 'xiaoliu', 'type': 'cat'}