第6章 字典

6.1 一个简单的字典

  • 先跟随书本创建一个简单的字典感受一下。
 alien_0 = {'color':'green','points':5}
print(alien_0['color'])
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内部循环的代码将会更加的复杂。
 My_imformation ={
'饶庆龙': {
'性别':'男',
'住址':'湖北',
'爱好':['篮球','足球','英雄联盟']
},
'张余丽':{
'性别':'女',
'住址':'北京',
'爱好':['王者','睡觉','追剧']
},
}
Names = []
for name,imformations in My_imformation.items():
if imformations['性别'] == '男':
print(name+'先生的爱好是:')
for hobby in imformations['爱好']:
print('\t'+hobby)
if imformations['性别'] == '女':
print(name+'女士的爱好是:')
for hobby in imformations['爱好']:
print('\t'+hobby)
  • 第1行到第12行,我们构建了一个字典。
  • 字典中包含了两个 键 一个 饶庆龙 一个 张余丽
  • 第14行 我们使用for循环我们构建遍历字典键-值对 获得键存贮为 name 获得值存储为 imformations
  • 第15行 我们判断值中列表对应的键 性别的值是否是 男
  • 第16行 判断成功的话我们输出 name+先生的爱好是,如果判断失败进入第19行判断
  • 第17行 对 ‘爱好’ 对应的列表值进行循环输出
  • 第18行 输出时加上 '\t'制表符以及爱好内容循环输出
  • 第19行 当第15行条件测试不通过时跳到该条条件测试

输出结果为:

饶庆龙先生的爱好是:
篮球
足球
英雄联盟
张余丽女士的爱好是:
王者
睡觉
追剧

练习:

Rao = {
'first_name':'rao',
'last_name':'qinglong',
'age':26,
'city':'xiaogan'
}
Zhang = {
'first_name':'zhang',
'last_name':'yuli',
'age':19,
'city':'beijing'
}
Li = {
'first_name':'li',
'last_name':'keqiang',
'age':36,
'city':'hainan'
}
Imformation = [Rao,Zhang,Li]
for info in Imformation:
print(info)

输出结果为:

{'first_name': 'rao', 'last_name': 'qinglong', 'age': 26, 'city': 'xiaogan'}
{'first_name': 'zhang', 'last_name': 'yuli', 'age': 19, 'city': 'beijing'}
{'first_name': 'li', 'last_name': 'keqiang', 'age': 36, 'city': 'hainan'}
Rao = {
'first_name':'rao',
'last_name':'qinglong',
'age':26,
'city':'xiaogan'
}
Zhang = {
'first_name':'zhang',
'last_name':'yuli',
'age':19,
'city':'beijing'
}
Li = {
'first_name':'li',
'last_name':'keqiang',
'age':36,
'city':'hainan'
}
Imformation = [Rao,Zhang,Li]
for info in Imformation:
print(info['first_name'].title()+info['last_name'].title()+' is '+str(info['age']) + ' in '+info['city'].title())

输出结果为:

RaoQinglong is 26 in Xiaogan
ZhangYuli is 19 in Beijing
LiKeqiang is 36 in Hainan

python自学Day05(自学书籍python编程从入门到实践)的更多相关文章

  1. 《Python编程:从入门到实践》分享下载

    书籍信息 书名:<Python编程:从入门到实践> 原作名:Python Crash Course 作者: [美] 埃里克·马瑟斯 豆瓣评分:9.1分(2534人评价) 内容简介 本书是一 ...

  2. 《python编程从入门到实践》2.3字符串

    书籍<python编程从入门到实践> 2.3字符串 知识模块 print()函数,函数名称突出为蓝色,输出括号内的变量或者字符创. 变量名的命名:尽量小写字母加下划线并且具有良好的描述性, ...

  3. Python编程从入门到实践笔记——异常和存储数据

    Python编程从入门到实践笔记——异常和存储数据 #coding=gbk #Python编程从入门到实践笔记——异常和存储数据 #10.3异常 #Python使用被称为异常的特殊对象来管理程序执行期 ...

  4. Python编程从入门到实践笔记——文件

    Python编程从入门到实践笔记——文件 #coding=gbk #Python编程从入门到实践笔记——文件 #10.1从文件中读取数据 #1.读取整个文件 file_name = 'pi_digit ...

  5. Python编程从入门到实践笔记——类

    Python编程从入门到实践笔记——类 #coding=gbk #Python编程从入门到实践笔记——类 #9.1创建和使用类 #1.创建Dog类 class Dog():#类名首字母大写 " ...

  6. Python编程从入门到实践笔记——函数

    Python编程从入门到实践笔记——函数 #coding=gbk #Python编程从入门到实践笔记——函数 #8.1定义函数 def 函数名(形参): # [缩进]注释+函数体 #1.向函数传递信息 ...

  7. Python编程从入门到实践笔记——用户输入和while循环

    Python编程从入门到实践笔记——用户输入和while循环 #coding=utf-8 #函数input()让程序暂停运行,等待用户输入一些文本.得到用户的输入以后将其存储在一个变量中,方便后续使用 ...

  8. Python编程从入门到实践笔记——字典

    Python编程从入门到实践笔记——字典 #coding=utf-8 #字典--放在{}中的键值对:跟json很像 #键和值之间用:分隔:键值对之间用,分隔 alien_0 = {'color':'g ...

  9. Python编程从入门到实践笔记——if语句

    Python编程从入门到实践笔记——if语句 #coding=utf-8 cars=['bwm','audi','toyota','subaru','maserati'] bicycles = [&q ...

  10. Python编程从入门到实践笔记——操作列表

    Python编程从入门到实践笔记——操作列表 #coding=utf-8 magicians = ['alice','david','carolina'] #遍历整个列表 for magician i ...

随机推荐

  1. java ->String、StringBuffer、StringBuilder三者之间的区别

    1.首先说运行速度,速度由快到慢排列:StringBuilder > StringBuffer > String String最慢的原因: String为字符串常量,而StringBuil ...

  2. SWPU邮件登录界面的仿写(第二次作业)

    (一).检查并下载网页元素 在需仿写的页面按F12,点击element,寻找需要的图片元素. (二). 分析网页的布局 查看网页源代码. (三).开始仿写 由于我们的目标是仿写网页,所以可以直接复制网 ...

  3. 模仿 SWPU邮件页面

    模仿SWPU邮件页面 要求 参考swpu 邮件主页,编写一个新闻后台登录页面,并用Js静态验证用户名密码是否为空,用户名为tom 密码为 123跳转到另一个页面 http://mail.swpu.ed ...

  4. zz 关于插入意向间隔锁( insert intention gap lock)产生的死锁问题

    出处: http://www.cnblogs.com/sunss/p/3166550.html 昨天看到一个很有意思的死锁,拿来记录下: 环境:deadlock on 事务隔离级别: read com ...

  5. 如何分析和提高(C/C++)程序的编译速度?

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/lihuidashen/p/129354 ...

  6. POJ1436

    题目链接:https://vjudge.net/problem/POJ-1436 解题思路:基于y轴建立线段树. 如图是根据样例画出的图.下面都以题目样例为例. 但是,如果仅仅以给出的y1, y2为边 ...

  7. 纯python自研接口自动化脚本更新版本,让小白也能实现0到1万+的接口自动化用例

    查看完整文章点击原文链接:纯python自研接口自动化脚本更新版本,让小白也能实现0到1万+的接口自动化用例 你是否还在用postman\jmeter做接口自动化吗?用python的开源框架[unit ...

  8. Spring IOC实现配置bean和实例

    配置 beans.xml文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&quo ...

  9. MySQL8多实例安装与mycat连接,最详细版本。

    [版权所有,转载请注明出处!违者必究!] 最近在搞mycat去实现主从库读写分离,所以博主就在自己的windows机器上进行了环境的搭建,在搭建MySQL多实例的时候还算顺利,就是mysql8和myc ...

  10. [FlashDevelop] 001.FlashDevelop + LayaFlash环境搭建

    产品简介: 唯一使用Flash直接开发或转换大型HTML5游戏的全套解决方案. 开发工具 FlashDevelop + JDK + flashplayer_18_sa_debug + LayaFlas ...