不赘述,仅仅记录一些和 C 不同 易混淆 我认为重要的地方
不懂的请使用搜索引擎 看书 询问老师解决 问我(不嫌弃的话
推荐网站:菜鸟教程
https://www.runoob.com/python3/python3-tutorial.html
内容参考:《Python编程 从入门到实践》(第二版)
简单的例子
字典感觉很像C语言的结构体
也是一种自定义结构形式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 person = { 'name' : 'Ekko' , 'age' : 10 , '职业' : 'student' } print (person['name' ]) print (person['age' ])print (person['职业' ])print (person) ------ Output: Ekko 10 student {'name' : 'Ekko' , 'age' : 10 , '职业' : 'student' }
使用字典
键值对
1 2 3 4 5 person = { 'name' : 'Ekko' , 'age' : 10 , '职业' : 'student' }
每个'键'都与一个值相关联,可使用键来访问相关联的值,相关联的值可以是数、字符串、列表乃至字典
对上面的例子,'name'就是一个键,与他关联的值就是'Ekko'
字典里可以存储多个键值对
访问字典中的值
1 2 3 4 5 6 7 8 9 person = { 'name' : 'Ekko' , 'age' : 10 , '职业' : 'student' } print (person['age' ]) ------ Output: 10
添加键值对
字典是一种动态结构,可以随时添加键值对
比如我想添加电话号码
1 2 3 4 5 6 7 8 9 10 person = { 'name' : 'Ekko' , 'age' : 10 , '职业' : 'student' } person['tel' ] = 123456 print (person)------ Output: {'name' : 'Ekko' , 'age' : 10 , '职业' : 'student' , 'tel' : 123456 }
先创建一个空字典
1 2 3 4 5 6 7 person = {} person['name' ] = 'Ekko' person['age' ] = 10 print (person)------ Output: {'name' : 'Ekko' , 'age' : 10 }
修改字典中的值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 person = { 'name' : 'Ekko' , 'age' : 10 } print (person)person['age' ] = 19 print (person)------ Output: {'name' : 'Ekko' , 'age' : 10 } {'name' : 'Ekko' , 'age' : 19 } person = { 'name' : 'Ekko' , 'age' : 10 } if person['age' ] < 18 : print ("You can't play the game!" ) else : print ("Welcome!" ) person['age' ] = 19 if person['age' ] < 18 : print ("You can not play the game!" ) else : print ("Welcome!" ) ------ Output: You can't play the game! Welcome! # 或者是游戏中,根据难度改变移动速度类似的
删除键值对
1 2 3 4 5 6 7 8 9 10 person = { 'name' : 'Ekko' , 'age' : 10 , 'tel' : 12345678 } del person['tel' ] print (person) ------ Output: {'name' : 'Ekko' , 'age' : 10 }
由类似对象组成的字典
1 2 3 4 5 6 7 8 9 10 11 12 game_rank = { 'Alice' : '王者' , 'Bob' : '钻石' , '张三' : '青铜' } print (game_rank['张三' ]) ------ Output: 青铜
使用get()来访问值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 person = { 'name' : 'Ekko' , 'age' : 10 } print (person['tel' ]) Traceback (most recent call last): File "D:\work\programming\code\py\main.py" , line 5 , in <module> print (person['tel' ]) KeyError: 'tel' print (person.get('tel' ,"Sorry,I don't know!" )) ------ Output: Sorry,I don't know! # 如果指定的键有可能不存在,应该考虑使用get(),而不是方括号
遍历字典
字典可以包含非常多的键值对,一个一个遍历会非常麻烦,所以可以
遍历所有键值对
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 person = { 'name' : 'Ekko' , 'age' : 10 , '职业' : 'student' } for a,b in person.items(): print (f"key:{a} " ) print (f"value:{b} " ) print ("" ) ------ Output: key:name value:Ekko key:age value:10 key:职业 value:student game_rank = { 'Alice' : '王者' , 'Bob' : '钻石' , '张三' : '青铜' } for name,rank in game_rank.items(): print (f"name:{name} " ) print (f"rank:{rank} " ) print ("" ) ------ Output: name:Alice rank:王者 name:Bob rank:钻石 name:张三 rank:青铜 for name,rank in game_rank.items(): print (f"{name} 's rank is {rank} " ) ------ Output: Alice's rank is 王者 Bob' s rank is 钻石张三's rank is 青铜
遍历字典中的所有键
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 game_rank = { 'Alice' : '王者' , 'Bob' : '钻石' , '张三' : '青铜' } for name in game_rank.keys(): print (name) ------ Output: Alice Bob 张三 for name in game_rank.keys(): print (name) if name == '张三' : print (game_rank[name]) print ("" ) ------ Output: Alice Bob 张三 青铜 if 'Ekko' not in game_rank.keys(): print ("Ekko真的菜" ) ------ Output: Ekko真的菜
按特定顺序遍历字典中的所有键
1 2 3 4 5 6 7 8 9 10 11 12 13 14 game_rank = { 'Alice' : '王者' , 'Bob' : '钻石' , '张三' : '青铜' , 'Sam' : '王者' } for name in sorted (game_rank.keys()): print (f"{name} 's rank is {game_rank[name]} " ) ------ Output: Alice's rank is 王者 Bob' s rank is 钻石Sam's rank is 王者 张三' s rank is 青铜
遍历字典中的所有值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 game_rank = { 'Alice' : '王者' , 'Bob' : '钻石' , '张三' : '青铜' , 'Sam' : '王者' } for rank in game_rank.values(): print (rank) ------ Output: 王者 钻石 青铜 王者 for rank in set (game_rank.values()): print (rank) ------ Output: 王者 钻石 青铜
* 注意
可以直接使用花括号创建集合
容易和字典混淆,当花括号里没有键值对的时候,定义很可能是集合
1 2 3 4 5 letters = {'a' ,'b' ,'c' ,'a' } print (letters) ------ Output: {'c' , 'a' , 'b' } {'b' , 'c' , 'a' } {'b' , 'a' , 'c' }
嵌套
字典存储到列表里,列表存在字典里,字典嵌套字典
积木的本质,简单的每一小块组装,复合,从而慢慢地实现复杂的结构和功能
字典列表
1 2 3 4 5 6 7 8 9 10 11 alien_0 = {'color' : 'green' , 'points' : 5 } alien_1 = {'color' : 'red' , 'points' : 12 } alien_2 = {'color' : 'yellow' , 'points' : 25 } aliens = [alien_0, alien_1, alien_2] for alien in aliens: print (alien) ------ Output: {'color' : 'green' , 'points' : 5 } {'color' : 'red' , 'points' : 12 } {'color' : 'yellow' , 'points' : 25 }
更真实的情况是,怪物有很多,每个都是代码随机生成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 aliens = [] for alien_number in range (30 ): new_alien = {'color' : 'green' , 'points' : 5 , 'speed' : 'slow' } aliens.append(new_alien) for alien in aliens[:5 ]: print (alien) print (f"total number of aliens: {len (aliens)} " )------ Output: {'color' : 'green' , 'points' : 5 , 'speed' : 'slow' } {'color' : 'green' , 'points' : 5 , 'speed' : 'slow' } {'color' : 'green' , 'points' : 5 , 'speed' : 'slow' } {'color' : 'green' , 'points' : 5 , 'speed' : 'slow' } {'color' : 'green' , 'points' : 5 , 'speed' : 'slow' } total number of aliens:30
虽然是批量生成,但是你可以通过语句进行修改
甚至在生成的时候就可以随机生成
在字典中存储列表
1 2 3 4 5 6 7 8 9 10 11 12 pizza = { '大小' : 'big' , '配料' : ['mushrooms' , 'extra cheese' ] } print (f"You ordered a {pizza['大小' ]} pizza with the following toppings:" )for topping in pizza['配料' ]: print ("\t" + topping) ------ Output: You ordered a big pizza with the following toppings: mushrooms extra cheese
在字典中存储字典
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 family = { 'dad' : { 'name' : 'Bob' , 'age' : 233 }, 'mom' : { 'name' : 'Alice' , 'age' : 233 }, 'child' : { 'name' : 'Ekko' , 'age' : 233 } } for member,member_information in family.items(): print (f"{member.title()} :" ) print ("\t" + member_information['name' ]) print (f"\t{member_information['age' ]} " ) print ("" ) ------ Output: Dad: Bob 233 Mom: Alice 233 Child: Ekko 233
注意
虽然是可以一直嵌套下去,但是建议不要嵌套太多
我们是为了更好解决问题,更好实现功能嵌套 ,不是为了嵌套而嵌套
end?