第九章 python 字典(Dict)
9-1 字典基本操作
- 列表与元组是依序排列可称是序列数据结构,只要知道元素的特定位置,即可使用索引观念取得元素内容,这一章的重点是介绍了字典,它并不是依序排列的数据结构,通常可称是非序列数据结构,所以无法使用类似列表的数值(0、1、… n )索引观念取得元素内容。
9-1-1 字义字典
-
字典也是一个列表型的数据结构,但是它的元素是用 “ 键 - 值 ” 方式配对存储存,在操作时是用键取得值的内容。定义字典时,是将 “ 键 - 值 ” 放大 “ { } ” 内,字典的语法格式如下:
- name_dict = { 键1:值1,…,键n:值n } # name_dict 是字典变量名称
-
字典的值可以是任何 python 的对象,所以可以是数值、字符串、列表等。
-
例:以水果行和面店为例定义一个字典,同时列出字典。下列字典是设定水果一斤的价格、面一碗的价格,最后使用 type() 列出字典数据类型。
fruits = { '西瓜':15,'香蕉':20,'水蜜桃':25} noodles = { '牛肉面':100,'肉丝面':80,'阳春面':60} print(fruits) print(noodles) print("字典 fruits 的数据类型是",type(fruits)) #输出结果 { '西瓜': 15, '香蕉': 20, '水蜜桃': 25} { '牛肉面': 100, '肉丝面': 80, '阳春面': 60} 字典 fruits 的数据类型是 <class 'dict'>
-
例:在使用 python 设计打斗游戏时,玩家通常扮演英雄的角色,敌军可以用字典方式储存,例如,可以用不同颜色的标记设定敌军的小兵,每一个敌军的小兵予一个分数,这样可以由打死敌军数量再统计游戏得分,可以用下列方式定义字典内容。
-
例:定义 soldier0 字典 tag 和 score 是键,red 和 3 是值。
soldier0 = {'tag':'red','score':3} print(soldier0) #输出结果 {'tag': 'red', 'score': 3}
9-1-2 列出字典元素的值
-
字典的元素是 “ 键 - 值 ” 配对设定,如果想要取得元素的值,可以将键当作是索引方式处理,因此字典内的元素不可有重复的键,可参考下列实例第 4 行,例如,下列可传回 fruits 字典水蜜桃的值
- fruits [ ’ 水蜜桃 ’ ]
-
例:分别列出水果店水蜜栎一斤的价格和面店年肉面一碗的价格。
fruits = { '西瓜':15,'香蕉':20,'水蜜桃':25} noodles = { '牛肉面':100,'肉丝面':80,'阳春面':60} print("水蜜桃一斤:",fruits["水蜜桃"],"元") print("牛肉面一碗:",noodles["牛肉面"],"元") #输出结果 水蜜桃一斤: 25 元 牛肉面一碗: 100 元
-
例:分别列出小兵字典的 tag 和 score 键的值。
soldier0 = {'tag':'red','score':3} print("tag 键的值:",soldier0['tag']) print("score 键的值:",soldier0["score"]) #输出结果 tag 键的值: red score 键的值: 3
9-1-3 增加字典元素
-
可使用下列语法格式增加字典元素。
- name_dict [ 键 ] = 值
-
例:为 fruits 字典增加橘子一斤 18 元
fruits = { '西瓜':15,'香蕉':20,'水蜜桃':25} fruits['橘子'] = 18 print(fruits) print('橘子一斤:',fruits['橘子'],"元") #输出结果 { '西瓜': 15, '香蕉': 20, '水蜜桃': 25, '橘子': 18} 橘子一斤: 18 元
-
在设计打斗游戏时,我们可以使用屏幕坐标标记小兵的位置,下列实例是用 xpos/ypos 标记小兵的 x 坐标,y 坐标
soldier0 = { 'tag':'red','score':3} soldier0['xpos'] = 100 soldier0['ypos'] = 30 soldier0['speed'] = 'slow' print("小兵的 x 坐标:",soldier0['xpos']) print("小兵的 y 坐标:",soldier0['ypos']) print("小兵的移动速度:",soldier0['speed']) #输出结果 小兵的 x 坐标: 100 小兵的 y 坐标: 30 小兵的移动速度: slow
9-1-4 更改字典元素内容
-
市面上的水果价格是浮动的,如果发生价格异动可以使用本节观念更改
-
例:将 fruits 字典的香蕉一斤改成 12 元
fruits = { '西瓜':15,'香蕉':20,'水蜜桃':25} print("旧香蕉的价格一斤:",fruits['香蕉'],'元') fruits['香蕉'] = 12 print("香蕉的价格一斤:",fruits['香蕉'],'元') #输出结果 旧香蕉的价格一斤: 20 元 香蕉的价格一斤: 12 元
-
在设计打斗游戏时,我们需要时刻移动小兵的位置,此时可以使用本节的方法来更改小兵位置
soldier0 = { 'tag':'red','score':3,'xpos':100,'ypos':30,'speed':'slow'} print("小兵旧的 x,y 坐标:",soldier0['xpos'],soldier0['ypos']) if soldier0['speed'] == 'slow': #慢 x_move = 1 elif soldier0['speed'] == 'medium': #中 x_move = 3 else: x_move = 5 #快 soldier0['xpos'] += x_move print("小兵新的 x,y 坐标:",soldier0['xpos'],soldier0['ypos']) #输出结果 小兵旧的 x,y 坐标: 100 30 小兵新的 x,y 坐标: 101 30
9-1-5 删除字典特定元素
-
如果想要删除字典特定元素,它的语法格式如下:
- del name_dict[ 键 ]
-
例:删除 fruits 字典的西瓜元素
fruits = {'西瓜':15,'香蕉':20,'水蜜桃':25} print("旧的 fruits 内容:",fruits) del fruits['西瓜'] print("新的 fruits 内容:",fruits) #输出结果 旧的 fruits 内容: {'西瓜': 15, '香蕉': 20, '水蜜桃': 25} 新的 fruits 内容: {'香蕉': 20, '水蜜桃': 25}
9-1-6 删除字典所有元素
-
python 有提供方法 clear() 可以将字典的所有元素删除,此时字典仍然存在,不过将变成空的字典
-
例:使用 clear() 方法删除 fruits 字典的所有元素
fruits = { '西瓜':15,'香蕉':20,'水蜜桃':25}