字典是Python中的唯一的映射类型,也是一个容器类型。Python的字典能够存储任意个数的Python对象,也包括其他容器类型。创建一个基本的字典,需要包括字典名称,以及用花括号扩起来的键值对,如下所示:

alien_0 = {'coclor': 'green','points' : 5}

  在上例中可以看到,一个基本的字典创建所需的所有元素,字典名称、花括号以及键值对,不同的键值对用逗号隔开,要想访问这个字典的值,最基本的方法如下所示:

alien_0 = {'coclor': 'green','points' : 5}print(alien_0['coclor'])
print(alien_0['points'])

  如上例所示,通过字典名称引用键来获取值,是字典值访问的常用方式,输出结果如下所示:

green
5

  对于值的操作,惯例来说是有四种方式的,即增删改查!上例中的方式算是查询值,那么对于增删改的操作则如下所示:

#创建字典person存储姓名,年龄和城市字段
person = {'name':'张飞','age':18,'city':'河北'}
print("最初的字典值:")
print(person)
print("---------------------------------------------------------------")
#添加武器作为新的值
person['arms'] = '丈八蛇矛'
print("添加新键值对的字典值:")
print(person)
print("---------------------------------------------------------------")
#删除上段代码中添加的武器
del person['arms']
print("删除键值对的字典值:")
print(person)
print("---------------------------------------------------------------")
#修改姓名和年龄
person['name'] = '刘备'
person['age'] = 20
print("修改最初键值对的字典值:")
print(person)

  上述中的增删改操作,都是对字典值的永久性变更操作,因此对于输出结果来说,是无法倒退回去的,想要恢复原值只能重新构建或修改回去,上例输出结果如下所示:

最初的字典值:
{'name': '张飞', 'age': 18, 'city': '河北'}
---------------------------------------------------------------
添加新键值对的字典值:
{'name': '张飞', 'age': 18, 'city': '河北', 'arms': '丈八蛇矛'}
---------------------------------------------------------------
删除键值对的字典值:
{'name': '张飞', 'age': 18, 'city': '河北'}
---------------------------------------------------------------
修改最初键值对的字典值:
{'name': '刘备', 'age': 20, 'city': '河北'}

  对于Python中字典值增删改查的基本操作,如上所示,大都是直接引用的操作,而对于字典的遍历则相对复杂,它包含对键的遍历,对值的遍历和对所有内容的遍历。

对于键值对的遍历,可以使用函数" items() "来实现,以习题6-3为例:

vocabulary = {'int':'整型','float':'浮点型','string':'字符串','date':'日期型','number':'数值型'}
for key,value in vocabulary.items():print(key + "是" + value!\n")

  如上例所示," items() "函数的使用很简单,首先构建字典vocabulary,然后在for循环中定义变量key和value,用来存储键和值的结果,接着让字典引用函数" items() "取出其中的键值对,最后输出结果即可," items() "方法能够返回键值对的列表,输出结果如下所示:

int是整型!float是浮点型!string是字符串!date是日期型!number是数值型的!

  并不是任何情况下使用字典的时候,我们都要遍历字典全部键值对的,有时候可能只需要遍历键或者遍历值来满足特定的需求,这是就要用到函数" keys() "和" values() "来专门获取字典的键和值,如下所示:

vocabulary = {'int':'整型','float':'浮点型','string':'字符串','date':'日期型','number':'数值型'}
#遍历字典中所有的键
print("用函数keys()来获取键:")
for key in vocabulary.keys():print("\t" + key)
print("\n---------------------------------------------------------------\n")
#遍历字典中所有的值
print("用函数values()来获取值:")
for value in vocabulary.values():print("\t" +value)

  上例中,分别定义变量key和value,来存储通过函数" keys() "和" values() "获取到的键和值的结果,输出结果如下所示:

用函数keys()来获取键:intfloatstringdatenumber---------------------------------------------------------------用函数values()来获取值:整型浮点型字符串日期型数值型

  事实上对于结合之前学习的各种知识的例题,书中有很多很有趣的案例,比如说遍历字典时添加if判断的例子,如下所示:

favorite_languages = {'jen':'python','sarah':'c','edward':'ruby','phil':'python',
}friends = ['phil','sarah']for name in favorite_languages.keys():print(name.title())if name in friends:print(name.title() + "'s favorite language is "",I see your favorite language is " +favorite_languages[name].title())

  在这个例子中,先创建了一个字典favorite_languages,紧接着又创建了一个列表friends,里面包含了字典favorite_languages中的部分键,for循环的意义在于,当键的值不在列表 friends中时,只输出姓名,否则需要输出完整的话来,输出结果如下所示:

Jen
Sarah
Sarah's favorite language is ,I see your favorite language is C
Edward
Phil
Phil's favorite language is ,I see your favorite language is Python

  这是一种很有用的例子,比如你在分发考卷时,需要叫一次人名上来一个同学,如果叫到你的朋友,而他考的很不错的时候,你可以加上一句:伙计,干的漂亮!推而广之,很多地方都会用到这个方法。

  在开头的时候,我们说到字典是一种容器类型,他也可以存储其他容器类型,比如存储列表,甚至存储字典!当然,同为容器类型的列表,也可以存储字典,如下所示:

alien_0 = {'color':'green','points':5}
alien_1 = {'color':'yellow','points':10}
alien_2 = {'color':'red','points':15}aliens = [alien_0,alien_1,alien_2]for alien in aliens:print(alien)

  这是书中的例子,将三个字典放在一个列表里,输出结果如下所示:

{'color': 'green', 'points': 5}
{'color': 'yellow', 'points': 10}
{'color': 'red', 'points': 15}

  由上例可以看出,将自丢按存入列表中的时候,字典其实是作为列表中的元素的状态存在的,因此访问这些字典的时候,用的也是最基础的列表访问的方法。当打开列表获取到列表中的元素以后,想要访问字典里面的键值对,当然也应该用访问字典的方式来操作字典的值,如书中例子所示:

aliens = []
#通过range()函数生成30条数据
for alien_number in range(30):new_alien = {'color': 'green', 'points': 5,'speed':'slow'}aliens.append(new_alien)
print("获取前五条数据,并查看列表长度")for aline in aliens[:5]:print(aline)
print("……")
print("Total number of aliens: " + str(len(aliens)))
print("---------------------------------------------------------------")#修改前三条数据的值
for alien1 in aliens[:3]:if alien1['color'] == 'green':alien1['color'] = 'yellow'alien1['points'] = 10alien1['speed'] = 'medium'print("查看前五条数据的变化")
for aline1 in aliens[:5]:print(aline1)

  先创建空列表aliens来存储生成的数据,然后根据不同的需求,分别对数据进行处理,对应的输出结果如下所示:

获取前五条数据,并查看列表长度
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
……
Total number of aliens: 30
---------------------------------------------------------------
查看前五条数据的变化
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}

  由上例可以看出,对于列表中字典值的修改,其实就是多了一步从列表中取出字段的步骤,当字典取出后的操作方式就是处理字典的操作方式。同理字典嵌套列表的操作方式也应当如此,先获取字典中的列表,再直接操作列表,如下所示:

#构建字典favorite_languages,每个人名对应喜欢的语言
favorite_languages= {'jen' : ['python','ruby'],'sarah' : ['c'],'edward' : ['ruby','go'],'phil' : ['python'],
}
#在for循环中对每个人喜欢的语言数量进行判断,输出不同的语句
for name,languages in favorite_languages.items():if len(languages) > 1:print("\n" + name.title() + "'s favorite languages are:")for language in languages:print("\t" + language.title())elif len(languages) == 1:print("\n" + name.title() + "'s favorite language is:")for language in languages:print("\t" + language.title()) 

  上例是根据书中例子更改后得到的,先定义字典favorite_languages,然后按照人名为键,分别输入他们喜欢的语言一门或数门,在下方通过for循环,针对每个人喜欢语言数量的不同,分别输出相对应的语句,输出结果如下所示:

Jen's favorite languages are:
    PythonRubySarah's favorite language is:
    CEdward's favorite languages are:
    RubyGoPhil's favorite language is:Python

  显然,Sarah和Phil的输出与Jen跟Edward的不同,这道题的难点在于你可能想不到如何处理判断喜欢语言数量的问题,因为len()函数的灵活运用对于新人来说,可能有些难以联想到。

  无论是字典嵌套列表还是列表嵌套字典,理清关系后处理起来都不是特别复杂,但是对于字典嵌套字典的问题,有时候会因为数据量的关系,导致处理起来相对复杂。不过从例题的角度上来说,我们不给自己找麻烦,如下所示:

users = {'aeinstein' : {'first':'albert','last':'einstein','location':'princetion',},'mcurie' : {  'first': 'marie','last': 'curie','location': 'paris',}
}for username,user_info in users.items():print("\nUsername: " + username)full_name = user_info['first'] + " " + user_info['last']location = user_info['location']print("\tFull name:" + full_name.title())print("\tLocation:" + location.title())

  这是一道书上的例题,定义字典users,用来存储两个键'aeinstein'和'mcurie',他们的值都是字典。案例中的处理方式是直接谁用处理普通字典的方式打开外层的字典,再用相同的方式处理内层嵌套的字典,这种处理方式并不复杂,但麻烦的地方在于有时候嵌套进去的每个内层字典的键值对未必是一样的,因此批量处理的时候会很麻烦。

  PS:以上是关于字典内容的小结,关于课后习题,除了在文中距离的部分外,还有几道我觉得挺有意思的,一并发上来做记录吧!

#6-7
#在为完成练习6-1而编写的程序中,再创建两个表示人的字典,
#然后将这三个字典都存储在一个名为people 的列表中。遍历这个列表,将其中每个人的所有信息都打印出来。
person_1 = {'first_name':'刘','last_name':'备','age':20,'city':'河北'}
person_2 = {'first_name':'关','last_name':'羽','age':19,'city':'山西'}
person_3 = {'first_name':'张','last_name':'飞','age':18,'city':'河北'}persons = [person_1,person_2,person_3]#遍历方式一:
print(persons)
print("---------------------------------------------------------------")
#遍历方式二:
for person in persons:print(person)
print("---------------------------------------------------------------")
#加点花样:
for person in persons:full_name = person['first_name'] + person['last_name']print(person['city'] + full_name + "现在" + str(person['age']) + "岁!")#输出结果如下:
[{'first_name': '刘', 'last_name': '备', 'age': 20, 'city': '河北'}, {'first_name': '关', 'last_name': '羽', 'age': 19, 'city': '山西'}, {'first_name': '张', 'last_name': '飞', 'age': 18, 'city': '河北'}]
---------------------------------------------------------------
{'first_name': '刘', 'last_name': '备', 'age': 20, 'city': '河北'}
{'first_name': '关', 'last_name': '羽', 'age': 19, 'city': '山西'}
{'first_name': '张', 'last_name': '飞', 'age': 18, 'city': '河北'}
---------------------------------------------------------------
河北刘备现在20岁!
山西关羽现在19岁!
河北张飞现在18岁!

#6-9
#创建一个名为favorite_places 的字典。
#在这个字典中,将三个人的名字用作键;
#对于其中的每个人,都存储他喜欢的1~3个地方。为让这个练习更有趣些,可让一些朋友指出他们喜欢的几个地方。
#遍历这个字典,并将其中每个人的名字及其喜欢的地方打印出来。
secnis_spot = {'张三' : ['莫斯科','多伦多'],'李四' : ['东京','希腊','新加坡'],'王五' : ['墨西哥','奥地利'],
}for name,citys in secnis_spot.items():print(name.title() + "喜欢的地方是:")for city in citys:print("\t" + city.title())#输出结果如下:
张三喜欢的地方是:莫斯科多伦多
李四喜欢的地方是:东京希腊新加坡
王五喜欢的地方是:墨西哥奥地利

# 6-11
# 创建一个名为cities 的字典,其中将三个城市名用作键;
# 对于每座城市,都创建一个字典,并在其中包含该城市所属的国家、
# 人口约数以及一个有关该城市的事实。#在表示每座城市的字典中,应包含country 、population 和fact 等键。
# 将每座城市的名字以及有关它们的信息都打印出来。
cities = {'北京': {'国家': '中国','人口': '2171万','事实': '中国首都'},'墨尔本': {'国家': '澳大利亚','人口': '500万','事实': '旅游城市'},'东京': {'国家': '日本','人口': '946万','事实': '房价很贵'},
}
for name, citys in cities.items():print(name + "的情况如下:")for n, city in citys.items():print("\t" + n + " : " + city)#输出结果如下:

转载于:https://www.cnblogs.com/a404790696/p/10975028.html

《Python编程从入门到实践》学习笔记6:字典相关推荐

  1. python基础学习[python编程从入门到实践读书笔记(连载一)]

    写在前面:本文来自笔者关于<python编程从入门到实践>的读书笔记与动手实践记录. 程序员之禅 文章目录 02变量和简单数据类型 03 列表简介 04 操作列表 05 if语句 06 字 ...

  2. python基础学习[python编程从入门到实践读书笔记(连载三)]:django学习笔记web项目

    文章目录 Django项目:学习笔记web网页 项目部署 参考 自己部署的网站,还是小有成就感的,毕竟踩过很多坑,实战技能也有些许进步. 网站链接:http://lishizheng.herokuap ...

  3. python基础学习[python编程从入门到实践读书笔记(连载五)]:数据可视化项目第16章

    文章目录 下载数据 制作全球地震散点图:JSON格式 end 几个实验结果: 每日最高气温: 地震图绘制: 下载数据 CSV文件格式 在文本文件中存储数据,一个简单方式是将数据作为一系列以逗号分隔的值 ...

  4. python编程从入门到实践读书笔记-《Python编程:从入门到实践》项目部分读书笔记(二)...

    鸽了一个暑假没有更新,现在趁着还没开学更一下.咕咕咕 上期作业: 请创建一个Django项目,命名为Blog,建不建立虚拟环境随便你,最后本地跑成了就行. 步骤: ①在需要创建工程的文件夹下打开cmd ...

  5. python基础学习[python编程从入门到实践读书笔记(连载二)]:外星人入侵项目

    第一版游戏demo 添加计分系统:中间是最高得分,右边是本次得分. 显示余下的飞船数 主函数如下,完整程序将上传到笔者的github:https://github.com/shizhengLi/lea ...

  6. python基础学习[python编程从入门到实践读书笔记(连载六)]:数据可视化项目第17章

    文章目录 使用API end 项目结果: 使用plotly可视化github最受欢迎的python仓库: 修改后的可视化图表: 使用API 编写独立的程序,实现对获取的数据可视化.我们使用Web AP ...

  7. python基础学习[python编程从入门到实践读书笔记(连载四)]:数据可视化项目第15章

    文章目录 matplotlib初学 基础绘图用法 随机漫步 使用Plotly模拟掷骰子 matplotlib初学 基础绘图用法 import matplotlib.pyplot as pltsquar ...

  8. python编程:从入门到实践 阅读笔记

    文章目录 第一章 起步 第二章 变量和简单数据类型 String 数字 整数 浮点数 第三章 列表简介 第四章 操作列表 元组 第五章 if 语句 第六章 字典 第七章 用户输入和while循环 第八 ...

  9. 《Python编程从入门到实践》记录之字典嵌套

    目录 1.字典列表 2.在字典中存储列表 3.在字典中存储字典 1.字典列表 列表内元素是字典的形式. 字典列表例子:定义三个字典,每个包含颜色和点数两个键和其相关联的值,将其三个字典存储在一个了列表 ...

  10. 《Python编程从入门到实践》记录之字典遍历

    目录 1.遍历字典所有的键-值对 2.遍历字典中的所有键 3.按特定顺序遍历字典中的多有键 4.遍历字典中的所有值 1.遍历字典所有的键-值对 遍历字典所有的键-值对,可以使用for循环实现: 声明两 ...

最新文章

  1. HTML5的data-*自定义属性
  2. 点击预览,有时可以打开,有时不可以
  3. MySQL——通过EXPLAIN分析SQL的执行计划
  4. Git 合并分支选项 --squash 合并提交历史
  5. Centos/Red Hat6.8 安装、配置、启动Gitlab (内网环境)
  6. Simulink之器件换流式电压型无源逆变电路
  7. ubuntu下解决wireshark权限问题
  8. VB控件注册 - 利用资源文件将dll、ocx打包进exe文件
  9. 如何获取k8s拓扑_k8s从安装到精通--Service 拓扑介绍
  10. linux下执行efi文件,在Linux下创建EFI BIOS Grub加载分区
  11. 终端天线—9.4G手机调试
  12. 从零开始学习音视频编程技术(41) H.264播放器
  13. 网速上传的怎么测试软件,怎么测网速(教你快速测试自家网速)
  14. 低功耗技术(三)UPF的使用
  15. obj类型的3d人体模型解读
  16. Vray材质——金属材质
  17. BOM成本计算成最下级算到最上级
  18. 群晖Video Staiton套件 安卓TV端使用教程
  19. 登录模板源码 : bootstrap风格
  20. 华为交换机升级包及补丁验证完整性

热门文章

  1. VSCode来绘制流程图真是得心应手
  2. Jquery中绑定select的change事件自动填充input的value值
  3. SpringBoot中定义全局异常处理器
  4. Word中轻松插入本地视频
  5. Tkinter的entry组件
  6. 你只知道JVM栈,知不知道栈帧、局部变量表、slot、操作数栈?
  7. 1、ShardingSphere基本概念
  8. 吸收塔如何提高吸收率_燕姐强烈推荐的一款燕窝饮,吸收率原来真的可以这么高!...
  9. 为什么 90% 的人更愿意相信“虚假”信息?(附鉴真指南)
  10. 【docker】docker基础原理,核心技术简介