第一章 Python基础
第六节 字典
字典类似于通过联系人名字查找联系人电话号码的电话本,即把键(名字)和值(电话号码)联系在一起。注意,键必须是唯一的。并且python只能使用不可变的对象(比如字符串)来作为字典的键,但是可以将不可变或可变的对象作为字典的值。举一个简单的字典例子。
如果说列表元组是一页笔记的话,字典就是一沓笔记,每张都有一个标签,没有顺序
alien = {'color': 'green', 'points': 5}这里有一沓笔记叫做alien(外星人),一张标签是color(颜色) ,里面写着green,另一张标签是points(点数)里面写着5
键值对在字典中的标记为:d = {key1 : value1, key2 : value2 }。注意键/值对用冒号分割,而各个对用逗号分割,所有这些都包括在花括号中。字典中的键/值对是没有顺序的。如果想要一个指定的顺序,那么在使用前自行排序。
使用字典
访问字典中的值
依次指定字典名和放在方括号内的键,如下所示:
代码:
1 alien_0 = {'color': 'green', 'points': 5} #这里有一沓笔记叫做alien_0(外星人_0),一张标签是color(颜色) 2 #,里面写着green,另一张标签是points(点数)里面写着5 3 print(alien_0['color'])#抽出color标签的一张,打印里面的内容
创建字典并修改字典中的值
创建空字典时使用一对空的花括号定义一个字典,再分行添加各个键值对。
修改字典的值可以指定字典名、键以及新的赋值。
代码:
1 alien = {}#创建一沓空的笔记叫做alien 2 alien['x_position'] = 0 #在alien中空白纸中写上标签'x_position'(x轴位置),在笔记里面写上0 3 alien['y_position'] = 25#在alien中空白纸中写上标签'y_position'(x轴位置),在笔记里面写上25 4 print(alien) #打印这一沓笔记 5 alien['x_position'] = 25#把标签为'x_position'(x轴位置)的内容改成25 6 print(alien)#打印这一沓笔记
添加/删除键值对
字典是一种动态结构。
添加键值对时,依次指定字典名、方括号和键、所赋的值。
删除键值对时,可使用del语句,指定字典名和要删除的键。
代码:
1 alien = {'color': 'green', 'points': 5} #这里有一沓笔记叫做alien_0(外星人_0),一张标签是color(颜色) ,里面写着green,另一张标签是points(点数)里面写着5 2 print(alien)#打印这一沓笔记 3 alien['x_position'] = 0#在alien中空白纸中写上标签'x_position'(x轴位置),在笔记里面写上0 4 alien['y_position'] = 25#在alien中空白纸中写上标签'y_position'(x轴位置),在笔记里面写上25 5 print(alien)#打印这一沓笔记 6 del alien['color'] #扔掉标签为“color”的一张 7 print(alien)#打印这一沓笔记
遍历字典
遍历所有的键值对
代码:
1 user = { 2 'username': 'efermi',#前面有四个空格的缩进,下同 3 'first': 'enrico', 4 'last': 'fermi', 5 } #这里有一沓笔记,三张纸有字 6 for key, value in user.items(): #把笔记一张一张纸抽出来(包括标签和内容) 7 print("\nKey: " + key)#打印标签 8 print("Value: " + value)#打印内容
由上可知,在字典的遍历中,可以声明两个变量分别存储键值对中的键和值。字典的方法item()返回一个键值对列表。注意,在遍历字典的时候,键值对的返回顺序与存储顺序不同。python只关系键和值之间的对应关系。
遍历字典中的所有键/值
使用方法keys()可以遍历字典中的所有键。或者不使用方法,默认遍历字典中的键。
使用方法values()可以遍历字典中的所有值。返回一个值列表。
代码:
1 favorite_languages = { 2 3 'jen': 'python', 4 5 'sarah': 'c', 6 7 'edward': 'ruby', 8 9 'phil': 'python', 10 11 }# 建立一个四张纸的笔记(字典) 12 13 for name in favorite_languages.keys(): 14 15 print(name.title())#把字典的标签一个一个拉出来打印首字母大写形式 16 17 for language in favorite_languages.values(): 18 19 print(language.title())#把字典里每张笔记内容一个一个拉出来打印首字母大写形式
或者不使用方法,默认遍历字典中的键。即for name in favorite_languages.keys():效果等同for name in favorite_languages:。
若需按顺序遍历,只需使用sorted()。
嵌套
将一系列字典存储在列表中,或者将列表作为值存储在字典中,称为嵌套。
字典列表
将一系列字典存储在列表中。
运行结果:
{'color': 'green', 'points': 5}
{'color': 'yellow', 'points': 10}
{'color': 'red', 'points': 15}
列表字典
将字典存储在列表中。就相当于 在有标签的笔记本的一页上贴便签
代码:
1 lili = { 2 'name': 'lili', 3 'phonenum': ['123', '456'], 4 } #建立一个lili的字典,里面又两对键值对 5 print("lili's name is " + lili['name'] + " and her phonenum is ") 6 #按要求提取字典内的标签'name'中的内容进行打印 7 for num in lili['phonenum']:#把pehonenum键中的列表里面的内容进行逐个打印 8 print("\t" + num)
字典中嵌套字典
字典中嵌套字典 就相当于 在有标签的笔记本的一页上附上另外一沓笔记
存储网站用户信息可以在字典中嵌套字典,例如:
1 users = { 2 'aeinstein': { 3 'first': 'albert', 4 'last': 'einstein', 5 'location': 'princeton', 6 }, 7 'mcurie': { 8 'first': 'marie', 9 'last': 'curie', 10 'location': 'paris', 11 }, 12 } # 这里的user里面,有两沓笔记,标签分别为:'aeinstein'和'mcurie',里面的内容都是一个标签为 first、last、 13 #;location的一叠笔记,内容是这两位科学家的信息 14 for username, user_info in users.items(): 15 print("\nUsername: " + username)#打印users的标签名 16 full_name = user_info['first'] + " " + user_info['last'] 17 # 用标签内容里面的字典中的first标签和last标签打印全名 18 location = user_info['location'] 19 #用标签内容里面的字典中的location标签打印地址 20 print("\tFull name: " + full_name.title()) 21 print("\tLocation: " + location.title())