源码
in this section 你将学习能够将相关信息关联起来的字典,接着会学习访问和修改字典的信息,以及如何遍历字典,和一些嵌套
字典是一系列的键值对,每一个键都有对应值.之间用逗号分隔",";并放在花括号内
alien={"color":"green","points":5}你可以存储任意个键值对
字典是一种动态结构,可随时在其中添加键—值对。
alien_0["postion_x"]=0 alien_0["postion_y"]=25 print(alien_0)python不关心键值对的添加顺序,只是关心他们之间的关系,我们应该学习python这一点
通常都需要先定义一个空字典
要修改字典中的值,可依次指定字典名、用方括号括起的键以及与该键相关联的新值。
alien_1["color"]="black" print(alien_1["color"])下面是一个改变x位置的实例
alien={"x_postion":0,"y_postion":25,"speed":"mid"} print(alien) if alien["speed"]=="slow": x_cur=1 elif alien["speed"]=="mid": x_cur=2 else:#fast x_cur=3 alien["x_postion"]=x_cur+alien["x_postion"] print(alien)首先定义初始字典,(x,y)的值(0,25),speed=mid
if判断他的速度从而改变不同的x值
最后11行将alien[“x”]的值更新为初始+当前值
如此当我们循环运行这段代码,这个数值会越来越大
对于字典中不再需要的信息,可使用del语句将相应的键—值对彻底删除。使用del语句时, 必须指定字典名和要删除的键。
del alien_1["color"] print(alien_1)删除的键值对永远消失
在之前的例子中都是使用一个字典存储与其相关的一些属性,比如alien的颜色,得分
你也可以存储众多对象的形同属性
favorite_language={ "jane":"python", "jane":"python", "leo":"c", "phil":"java" }利用缩进让代码可读,(放在一行很丑的)之间要用逗号分隔
print("leo's favorite_language is "+favorite_language["leo"]) #c之前例子都是单个指定的去调用字典,一个字典可能包含几百万个键值对.所以本节我们将学习如何去遍历字典
当然是使用for in
user={ "username":"leoqlone", "first_name":"leo", "last_name":"qlone" } for key,value in user.items(): print("\nkey:"+key) print("value:"+value)要利用for in遍历字典,需要定义2个变量临时保存键 和 值
第二部分包含 “字典名.items()” 方法,他返回1个键值,接下来for in 将每个键值存储到指定的变量里
接着我们可以任意使用变量来代替指定的键值对
python不关系键值的顺序,只是关心他们之间的relationship
对于两个key value变量的命名尽可能遵循zen of python的规则,阐明变量和简直之间的关系,例如之前的实例language中,就可以使用name和language而不是k,v
在不需要键值对中的值时,方法keys()很有用//key的意思时关键,键
user={ "username":"leoqlone", "first_name":"leo", "last_name":"qlone" } #for name in user:等价的,但是后者更清晰 for name in user.keys(): print(name) # username first_name last_name遍历字典时,会默认遍历所有的键,因此,如果将上述代码中的fornameinfavoritelanguages.keys():替换为fornameinfavorite_languages:,输出将不变
favorite_language={ "jane":"python", "leo":"c", "phil":"java" } friends=["leo","jane"] for name in favorite_language: print(name.title()) if name in friends: print("hi "+name.title()+" i see you favorite language is "+ favorite_language[name]+"\n")方法keys()并非只能用于遍历;实际上,它返回一个列表,其中包含字典中的所有键,因此 处的代码行只是核实’erin’是否包含在这个列表中
if "erin" not in favorite_languages.keys(): print还记得sorted()吗,暂时对列表排序
字典总是明确地记录键和值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的。 这不是问题,因为通常你想要的只是获取与键相关联的正确的值。
要以特定的顺序返回元素,一种办法是在for循环中对返回的键进行排序。为此,可使用函 数sorted()来获得按特定顺序排列的键列表的副本:
favorite_language={ "zane":"python", "leo":"c", "phil":"java" } for name in sorted(favorite_language.keys()): print(name.title()+", thank you for taking the poll.")排序的顺序按照a~z字典序
如果你感兴趣的主要是字典包含的值,可使用方法values(),它返回一个值列表
favorite_language={ "zane":"python", "leo":"c", "phil":"java" } for language in favorite_language.values(): print(language.title())值不是唯一的,因此会有重复,所以可以使用set()
for language in set(favorite_language.values()): print(language)set返回一个不重复的列表
遍历
遍历所有的键值对 for k,v in dict.items(): 遍历所有的键 for k in dict.keys(): 遍历所有的值 for v in dict.values(): 值去重 for v in set(dict.values()):将字典存储在列表,或将列表作为值存储在字典,这叫做嵌套
但是跟符合实际情况的是循环创建 range()
aliens=[] #空列表,以便后续追加 #30次循环 追加aliens里面 for alien in range(30): new_alien={"color":"green","points":5} aliens.append(new_alien) 3输出前5个 for alien in alien: print(alien) print("...") print("total number of aliens:"+str(len(aliens)))修改特定的外星人
for alien in aliens[0:3]: #约定了前三个 #特判与修改 if alien["color"]=="green": alien["color"]="yellow" alien["points"]=10 alien["speed"]="fast"因为字典的结构存在相同,所以利用循环来操作会很方便,字典与列表的结合,列表是大体,之中包含着字典,就行多维数组,第一个维度决定了顺序高度,第二个维度是他内部的东西
多个字典存放在列表里
列表存储在字典中,而不是将字典存储在列表中.是为了字典里有多个值,而单纯的使用列表,只能存储要添加的比萨配料;信息不聚合
pizza={#创建一个披萨列表里面存放披萨的配料 "crust":"thick",#内容 "topping":["mushroom","cheese"]#上面的配料,只有使用列表并且放在字典最合适 } #输出披萨的信息,只输出了头 print("you ordered a "+pizza['crust']+"crust pizza"+ "with the following topping:") #接着输出字典里topping列表的所以配料 for top in pizza["topping"]: print("\t"+top)每当键值对的关系不是唯一时,在字典里的值里存放列表存储;也就嵌套
对于字典{列表[…]}进行遍历用for循环即可
favorite_language={ "jane":["python","c"], "leo":["c","java"], "phil":["java","ruby"] } for k,v in favorite_language.items(): print("\n"+k+"'s favorite_language are:") for i in v: print("\t"+i)但这样做时,代码可能很快复杂起来,接下来看一个列子
users是一个字典包含了所有用户
a又是一个字典,之中包含了更多的信息,姓名等
b
综上就是字典嵌套字典
users = { 'aeinstein': { 'first': 'albert', 'last': 'einstein', 'location': 'princeton', }, 'mcurie': { 'first': 'marie', 'last': 'curie', 'location': 'paris', }, 'leoqlone':{ 'first': 'leo', 'last': 'qlone', 'location': 'China' }} for username,userinfo in users.items(): print("\nUsersname: "+username) full_name=userinfo['first']+userinfo['last'] loc=userinfo["location"] print("\tFull name: "+full_name.title()) print("\tLoction: "+loc.title())这程序的目的时输出users里所有的用户,全名以及位置
程序的结构是
大字典users存放所有的用户
用户:每一个用户又是字典,里面存放的信息类型不同不能用列表,但他们有相同的键
在本章中,你学习了:如何定义字典,以及如何使用存储在字典中的信息;如何访问和修改 字典中的元素,以及如何遍历字典中的所有信息;如何遍历字典中所有的键值对、所有的键和 所有的值;如何在列表中嵌套字典、在字典中嵌套列表以及在字典中嵌套字典。 在下一章中,你将学习 while 循环以及如何从用户那里获取输入。这是激动人心的一章,让 你知道如何将程序变成交互性的——能够对用户输入作出响应。