第6章 字典
6.1 一个简单的字典
- 先跟随书本创建一个简单的字典感受一下。
1 alien_0 = {'color':'green','points':5} 2 print(alien_0['color']) 3 print(alien_0['points'])
输出结果为:
green 5
- 第1行 创建一个alien_0的字典 key 分别为 color 和 points
- 第2行 读取color对应的值 并且 打印出来
- 第3行 读取points对应的值 并且 打印出来
6.2 使用字典
- 字典是一些列的键-值对,每个键都与一个值相关联。
- 可以使用键来访问与之对应的值,值可以是数字、字符串、列表乃至字典。
- 字典是放在{}中一系列的键-值对。键与值之间用 冒号 :隔开
6.2.1 访问字典中的值
- 要获取与键相关的值,可以依次指定字典名和放在方括号内的键 如6.1下代码 alien_0['color']
6.2.2 添加键-值对
- 字典是一种动态结构,可以随时添加键-值对。
- 要添加键-值对,可依次指定字典名、用方括号括起来的键和相关联的值。
- python中不关心键-值对的添加顺序,而只是关心键和值之间的关联联系。
alien_0 = {'color':'green','points':5} #在字典中添加一个新的键 x_position 值为0 alien_0['x_position'] = 0 #在字典中添加一个新的键 y_position 值为25 alien_0['y_position'] = 25 #打印检查下列表 print(alien_0)
输出结果为:
{'color': 'green', 'points': 5, 'x_position': 0, 'y_position': 25}
6.2.3 先创建一个空字典
- 先创建一个空字典,然后逐个往里面添加键-值对
alien_0 = {} alien_0['color'] = 'green' alien_0['points'] = 5 print(alien_0)
输出结果为:
{'color': 'green', 'points': 5}
6.2.4 修改字典中的值
- 要修改字典中的值。可以依次指定字典名、用方括号括起来的键以及与键关联的新值。
alien_0 = {} alien_0['color'] = 'green' alien_0['points'] = 5 print(alien_0) #修改字典中 color 关联值为 red alien_0['color'] = 'red' #再度输出字典检查变化 print(alien_0)
输出结果为:
{'color': 'green', 'points': 5} {'color': 'red', 'points': 5}
6.2.5 删除键-值对
- 使用del语句将字典中的键-值对彻底删除。
- 使用del语句时,必须指定字典名和要删除的键。
alien_0 = {'color':'green','points':5} del alien_0['color'] print(alien_0)
输出结果为:
{'points': 5}
6.2.6 由类似对象组成的字典
- 字典不仅可以像前面的示例一样存储一个对象,我们也可以用来存贮众多对象的同一信息。
- 换行时需要一行缩进死歌空格(默认tab键)最后一行一个缩进加花括号。
- 还有一些其他可行的格式设置方法。
- print 内容较多需要换行编写代码时,也需要缩进。
#注意 缩进 逗号 花括号 格式 favorite_language = { 'jen':'python', 'sarah':'c', 'edward':'ruby', 'phil':'python', } print("sarah's favorite language is "+ favorite_language['sarah'].title()+ '.')
输出结果为:
sarah's favorite language is C.
练习:
#练习6-1 My_Lover ={ 'first_name':'zhang', 'last_name':'keai', 'age':18, 'city':'xiaogan' } print(My_Lover)
输出结果为:
{'first_name': 'zhang', 'last_name': 'keai', 'age': 18, 'city': 'xiaogan'}
6.3 遍历字典
- 遍历字典三种方法:键-值对 键 值
6.3.1 遍历所有的键-值对
- 使用for循环编写字典的遍历循环,声明两个变量 key valu(可取任意合规名称)用于存贮对应的键、值。
- 方法items()表示返回一个键-值对列表。
- 键-值对的返回顺序与存贮顺序不同,字典是无序的,只关心键-值之间的关系
favorite_language = { 'jen':'python', 'sarah':'c', 'edward':'ruby', 'phil':'python', } for key,value in favorite_language.items(): print(key.title()+ '\'s favorite language is'+ value.title())
输出结果为:
Jen's favorite language isPython Sarah's favorite language isC Edward's favorite language isRuby Phil's favorite language isPython
6.3.2 遍历字典中所有的键
- 遍历字典时,python中默认是遍历字典的所有键。
- 我们也可以使用方法keys(),这样可以更清晰更明确。
- 方法keys并非只能用于遍历,实际上他返回一个列表,其中包含字典中所有的键。
favorite_language = { 'jen':'python', 'sarah':'c', 'edward':'ruby', 'phil':'python', } friend_name = ['phil','sarah'] for name in favorite_language.keys(): if name in friend_name: print('My friend '+ name + ' is in the list!')
输出结果为:
My friend sarah is in the list! My friend phil is in the list!
6.3.3 按顺序遍历字典中所有键
- 字典总是明确的记录键和值之间的关系,但是获取字典元素时,获取顺序是不可预测的。
- 要以特定的顺序返回元素,一种方法是在for循环中对返回的键做排序。
- 使用函数sorted来获得特定顺序拍了的键列表的副本。
favorite_language = { 'jen':'python', 'sarah':'c', 'edward':'ruby', 'phil':'python', } for name in sorted(favorite_language.keys()): print(name.title() + ' is in the dictionary')
输出结果为:
Edward is in the dictionary Jen is in the dictionary Phil is in the dictionary Sarah is in the dictionary
6.3.4 遍历字典中的所有值
- 字典中键是独一无二的,不可重复的,但是值并不是,像上述代码中的 python在值中出现了两次。
- 可以使用values()方法对字典进行值得遍历,返回一个值得列表,不包含任意键。
- 如果字典中存在大量重复值,而这些值我们不想要他重复,我们可以使用set()来对返回值得列表去重。
- 集合类似于列表,但是集合内的元素必须是独一无二的。
favorite_language = { 'jen':'python', 'sarah':'c', 'edward':'ruby', 'phil':'python', } for language in set(favorite_language.values()): print(language.title())
输出结果为:
Ruby C Python
6.4 嵌套
- 将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。
6.4.1 字典列表
#创建空列表 aliens = [ ] #使用for循环计次循环,循环30次。 for new_alien in range(0,30): #每次循环将字典new_alien添加到列表中去 new_alien={'color':'green','points':5} aliens.append(new_alien) #结束后输出列表的长度,可以看到包含30个元素,每个元素都是独立的列表。 print(len(aliens))
输出结果为:
30
6.4.2 在字典中存储列表
- 每当需要在字典的一个键关联多个值得时候,都可以在字典中嵌套一个列表。
- 列表和字典的嵌套层级不应太多。如过嵌套层级太多,很有可能有更简单的解决问题方案。
My_imformation = { '姓名':'饶庆龙', '爱好':['篮球','足球','英雄联盟'] } print('你好'+My_imformation['姓名']+'先生!这是您的爱好:') for hobbies in My_imformation['爱好']: print('\t'+hobbies )
输出结果为:
你好饶庆龙先生!这是您的爱好: 篮球 足球 英雄联盟
6.4.3 在字典中存贮字典
- 可以在字典中嵌套字典,但是这样做,代码可能很快复杂起来。
- 倘若字典包含不同的键,for内部循环的代码将会更加的复杂。
1 My_imformation ={ 2 '饶庆龙': { 3 '性别':'男', 4 '住址':'湖北', 5 '爱好':['篮球','足球','英雄联盟'] 6 }, 7 '张余丽':{ 8 '性别':'女', 9 '住址':'北京', 10 '爱好':['王者','睡觉','追剧'] 11 }, 12 } 13 Names = [] 14 for name,imformations in My_imformation.items(): 15 if imformations['性别'] == '男': 16 print(name+'先生的爱好是:') 17 for hobby in imformations['爱好']: 18 print('\t'+hobby) 19 if imformations['性别'] == '女': 20 print(name+'女士的爱好是:') 21 for hobby in imformations['爱好']: 22 print('\t'+hobby)
- 第1行到第12行,我们构建了一个字典。
- 字典中包含了两个 键 一个 饶庆龙 一个 张余丽
- 第14行 我们使用for循环我们构建遍历字典键-值对 获得键存贮为 name 获得值存储为 imformations
- 第15行 我们判断值中列表对应的键 性别的值是否是 男
- 第16行 判断成功的话我们输出 name+先生的爱好是,如果判断失败进入第19行判断
- 第17行 对 ‘爱好’ 对应的列表值进行循环输出
- 第18行 输出时加上 '\t'制表符以及爱好内容循环输出
- 第19行 当第15行条件测试不通过时跳到该条条件测试
输出结果为:
饶庆龙先生的爱好是: 篮球 足球 英雄联盟 张余丽女士的爱好是: 王者 睡觉 追剧