|
--- 8.字典 定义 c++容器中,我们学过一个存储键值对的容器——map容器,它的底层由二叉树实现,可以通过键来访问相关联的值。 python中也有类似的一个数据结构——字典: 字典是一系列键值对,每个键都与一个值相关联,也是可以通过键来访问相关联的值,底层由哈希表实现。 它的书写方式如下: # 字典用放在花括号内的一系列键值对表示# 字典的格式为键1:值1,键2:值2......student_0 = {"grade":"five","age":11}# 要获取与键相关联的值,可指定字典名和放在方括号内的键print(student_0["grade"],student_0["age"])# 输出:five 11增删改查 添加、修改、查看 student_0 = {"grade":"five","age":11}student_0["class"]="one" # 添加一个键值对,键为“class”,值为“one”print(student_0)student_0["class"]="two" # 修改一个键值对,键为“class”,值为“two”print(student_0)# 输出:{'grade': 'five', 'age': 11, 'class': 'one'}# {'grade': 'five', 'age': 11, 'class': 'two'}删除键值对 student_0 = {"grade":"five","age":11}del student_0["grade"]print(student_0)# 输出:{'age': 11}遍历字典 遍历所有的键值对 利用方法.item()返回一个键值对列表 student_0 = {"grade":"five","age":11,"class":"two"}# 可以用for循环遍历所有键值对# 用两个变量key和value分别储存键和值for key,value in student_0.items(): # 方法.item()返回一个键值对列表 print("\nKey:"+key) print("Value:"+str(value))输出: 遍历所有键 利用方法.keys()返回包含字典里所有键的列表 student_0 = {"grade":"five","age":11,"class":"two"}# 用变量key储存键for key in student_0.keys(): # 方法.keys()返回包含字典里所有键的列表 print("Key:"+key)# 输出:# Key:grade# Key:age# Key:class 注:遍历字典时,如果不点出方法,其实默认就是遍历所有键,也就是上述代码也可以写作for key in student_0: 遍历所有值 利用方法.value()返回一个包含字典所有值的列表 使用方法和上面两个并没有差异, 但我们需要注意一个点,字典的键默认是不可以重复的,但是键所对应的值却没有强制规定,可能出现重复现象。 所以如果你有剔除重复项的需求,可以使用函数set()进行强制类型转换,把列表类型转换为没有重复的集合类型。当然字典的遍历默认是无序的,想要对它排序,可以用我们第一期提到的sorted()函数来获取按特定顺序排列的键列表副本 # 记录下来所有人喜欢的语言,并且遍历打印出来都有什么,不允许重复favorite_languages ={"jen":"python","sarah":"c","edward":"ruby","phil":"python"}print("The following languages have been mentioned:")for language in sorted(set(favorite_languages.values())): print(language.title())嵌套 字典嵌套在列表里 # 列表中嵌套了3个学生字典student_0={"name":"jen","favorite_language":"python"}student_1={"name":"sarah","favorite_language":"c"}student_2={"name":"phil","favorite_language":"python"}students=[student_0,student_1,student_2]print(students)列表嵌套在字典里 每当字典中的某个键需要关联多个值时,都可以把列表嵌套进去 # 一个简易点披萨系统,用字典指定饼皮的薄厚、上面的小料都有什么,并以一定格式打印概述my_pizza = { "crust":"thick", "toppings":["mushrooms","extra cheese"]# 列表嵌套在字典里}print("You ordered a"+my_pizza["crust"]+"-crust pizza"+ "with the following toppings:")for topping in my_pizza["toppings"]: print("\t"+topping)字典嵌套在字典里 至于字典自身的嵌套,理论上当然可行,但是容易把简单的问题复杂化,并且代码结构不清晰,所以这里就不展开讲了,若感兴趣,可以自己打代码看一看。 9.获取用户输入 获取用户输入可以使用input()函数,咱们在第二期if语句的补充那里提到过,参数是打印给用户的提示信息 # 可以直接指定提示信息name = input("Tell me your name:\n")也可以用变量储存提示信息,格式更加灵活prompt = "Thanks,"+name+"\n"prompt+="\nHow old are you:\n"age = input(prompt)print("\nHello,"+name+"-"+age) 可以看到我们最后一行代码,直接+age,而不用做str()这样的强制类型转换,这足以说明,使用函数input()时,python会将用户输入解读为字符串。 10.while循环 语法 前面咱们已经看过很多python的语法了,他们所能实现的目标与c语言并无差异,只是形式不太相同: c语言用大括号表示一个代码块,而python用缩进实现 c语言的if语句等条件用括号括起来,而python却不需要 while语句在c语言里的格式为: while(条件){ 执行代码1 执行代码2 } 在python中的格式为: while 条件 : [缩进]执行代码1 [缩进]执行代码2 另注:在python的while循环里,也同样可以使用break与continue,用法与c语言一样。 count=0while True: count+=1 if count ==2: print("遇到2,跳出本次循环") continue print("当前:",count) if count==4: print("遇到4,退出循环") break用while处理列表 for循环遍历列表时,是按索引顺序逐个访问元素的。 而列表的底层是连续存储的动态数组,一旦在遍历过程中删除元素,后续元素会自动向前移动, 导致for循环的索引和实际元素错位,进而导致遍历过程中的遗漏。 所以,最好的列表处理方案是,只读用for,修改用while。 小编碎碎念 如果你已经学过了其他语言,再想接触python,其实最好的办法不是看网课,而是直接看书,或者可以看别人做的笔记,然后直接写代码验证学习。 我的这些笔记,是阅读过业界公认的python入门友好书籍,提炼总结出来的,如有模糊之处,也推荐大家买一本这个书,看一看该书作者精彩的讲解,感受一下python的精妙。 我是一只思绪漫游的00后,欢迎关注~ 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |