Python基础教程【读书笔记】 - 2016/7/19
希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴!
第八波:第4章 字典:当索引不好用时
将学到一种通过名字引用值的数据结构,这种结构类型称为映射mapping。字典是Python内唯一内建的映射类型。字典中的值并没有特殊的顺序,都是存储在一个特定的键key里。键可以使 数字、字符串甚至是元组。
[4.1] 字典的使用
字典有时比列表更加使用。
[4.2] 创建和使用字典
字典由多个键及其对应的值构成的对组成(也把键/值对称为项)。每个键和它的值之间用冒号隔开,项之间用逗号隔开,而整个字典是由一堆大括号括起来。字典中的键是唯一的,而值并不唯一。
[4.2.1] dict函数
使用dict函数,通过其他映射或者键值序列对简历字典。
[4.2.2] 基本字典操作
len(d)返回d中项的数量
d[k]返回关联到键k上的值
d[k]=v将值v关联到键k上
del d[k]删除键为k的项
k in d 检查d中是否含有键为k的项
尽管字典和列表有多重特性相同,但也有下面一些重要的区别。
键类型:字典的键不一定为整型数据,也可能是其他不可变类型,如浮点型、字符串或者元组
自动添加:即使那个键期初在字典中并不存在,也可以为它分配一个值。
成员资格:k in d查找的是键,而不是值。在字典中检查键的成员资格比在列表中检查值得成员资格更高效,数据结构的规模越大,两者的效率差距越明显。
[4.2.3] 字典的格式化字符串
[4.2.4] 字典方法
1. clear
clear方法清除字典中所有的项。这是个原地操作(类似于list.sort),所以无返回值(或者说返回None)。 如果真的想清空原始字典中所有的元素,必须使用clear方法。
2. copy
copy方法返回一个具有相同键值对的新字典(这个方法实现的是浅赋值shallow copy),因为值本身就是相同的,而不是副本。
x={'username':'admin','machines':['foo','bar','baz']}
y=x.copy()
y['username']='mlh'
y['machines'].remove('bar')
>>>y
{'username':'mlh','machines':['foo','bar']}
>>>x
{'username':'admin','machines':['foo','bar']}
当副本中替换值的时候,原始字典不受影响。但是如果修改了某个值(原地修改,而不是替换),原始的字典也会改变,因为同样的值也存储在原字典中。
避免这个问题的一种方法就是使用深复制deep copy,复制器包含所有的值。可以使用copy模块的deepcopy函数来完成操作:
from copy import deepcopy
3. fromkeys
fromkeys方法使用给定的键建立新的字典,每个键默认对应的值为None。
dict.fromkeys(['name','age'])
dict.fromkeys(['name','age'],'(Unknown)') #不使用None作为默认值,自己提供默认值
4. get
get方法是更宽松的访问字典项的方法。当使用get访问一个不存在的键时,没有任何异常,而得到了None值。还可以自定义“默认”值,替换None:d.get('name','N/A')
5. has_key
has_key方法可以检查字典中是否含有给出的键。
6. items和iteritems
items方法将所有的字典项以列表方式返回,这些列表项中的每一项都来自于键值对。并且项在返回时并没有特殊的顺序。
iteritems方法的作用大致相同,但是会返回一个迭代器对象而不是列表。在很多情况下使用iteritems更高效,尤其是想要迭代结果的情况下。
7. keys和iterkeys
keys方法将字典中的键以列表形式返回,而iterkeys则返回针对键的迭代器。
8. pop
pop方法用来获得对应于给定键的值,然后讲这个键-值对从字典中移除。
9. popitem
popitem方法类似于list.pop,后者会弹出列表的最后一个元素。但不同的是,popitem弹出随机的项,因为字典并没有“最后的元素”或者其他有关顺序的概念。若想一个接一个地移除并处理项,这个方法就非常有效了,因为不用首先获取键的列表。
字典中没有与append等价的方法,因为字典是无序的,类似于append的方法是没有任何意义的。
10. setdefault
setdefault方法在某种程度上类似于get方法,就是能够获得与给定键相关联的值,除此之外,setdefault还能在字典中不含有给定键的情况下设定相应的键值。
11. update
update方法可以利用一个字典项更新另外一个字典。提供的字典中的项会被添加到旧的字典中,若有相同的键则会进行覆盖。
12. values和itervalues
values方法以列表的形式返回字典中的值,itervalues返回值的迭代器。与返回键的列表不同的是,返回值的列表中可以包含重复的元素。
[4.3] 小结
映射:映射可以使用任何不可变对象标识元素。Python唯一内建的映射类型是字典。
利用字典格式化字符串:通过格式化说明符中包括名称(键)来对字典应用字符格式化操作。
字典的方法:调用的方法和调用列表以及字符串方法的方式相同。
Python基础教程【读书笔记】 - 2016/7/19的更多相关文章
- 《Python基础教程读书笔记》
第1章 快速构造:基础知识 1.2交互式构造器 不强制分号,一行就是一行.可以加上分号 1.4数字和表达式 加.减.乘.除.整除.求余.指数.取反(-例如-2**2,**的优先级比-大) from _ ...
- Python基础教程 读书笔记(2)第二章 列表和元组
2.1序列概览 列表和元组的主要区别在于,列表可以修改,元组则不能.也就是说如果要根据要求来添加元素,那么列表可能会更好用;而出于某些原因,序列不能修改的时候,使用元组则更为合适.使用后者的理由通常是 ...
- SQL Server2012 T-SQL基础教程--读书笔记(1-4章)
SQL Server2012 T-SQL基础教程--读书笔记(1-4章) SqlServer T-SQL 示例数据库:点我 Chapter 01 T-SQL 查询和编程背景 1.3 创建表和定义数据的 ...
- SQL Server2012 T-SQL基础教程--读书笔记(8 - 10章)
SQL Server2012 T-SQL基础教程--读书笔记(8 - 10章) 示例数据库:点我 CHAPTER 08 数据修改 8.1 插入数据 8.1.1 INSERT VALUES 语句 8.1 ...
- SQL Server2012 T-SQL基础教程--读书笔记(5-7章)
SQL Server2012 T-SQL基础教程--读书笔记(5-7章) SqlServer T-SQL 示例数据库:点我 Chapter 05 表表达式 5.1 派生表 5.1.1 分配列别名 5. ...
- Python基础教程学习笔记:第一章 基础知识
Python基础教程 第二版 学习笔记 1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入“p ...
- 【学习笔记】Python基础教程学习笔记
教程视频网盘共享:http://pan.baidu.com/s/1hrTrR5E 03-python基础.if判断 print 输出数据 print("hahahah")----- ...
- 【索引】Objective-C基础教程-读书笔记
第1章 启程 http://www.cnblogs.com/duxiuxing/p/5492219.html 第2章 对C的扩展 第3章 面向对象编程的基础知识 第4章 继承 第5章 复合 第6章 ...
- 《python基础教程》笔记之 异常
按自己的方式出错 使用raise语句引发一个异常,可以使用一个类(应该是Exception的子类)或者实例参数来作为raise的引发对象.使用类时,程序会自动创建实例,如 >>> r ...
- 《python基础教程》笔记之 序列通用操作
索引 序列中的所有元素都是有编号的--从0开始递增.使用负数索引时,Python会从右边,也就是从最后一个元素开始计数,最后一个元素的位置编号是-1.此外,字符串是一个有字符组成的序列,字符串字面值可 ...
随机推荐
- Android内存管理机制之一:low memory killer
转载自http://www.miui.com/thread-29268-1-1.html 准备写这个专题之前,心里是有点忐忑的.首先Android内存管理机制相当复杂,想要讲清楚比较困难:其次对于绝大 ...
- hexo系列教程
hexo系列教程来源: http://zipperary.com/2013/05/28/hexo-guide-1/ hexo系列教程:(一)hexo介绍 什么是hexo hexo是一个基于Node.j ...
- IDOC、ALE、EDI三者之间的区别于联系
EDI (Electronic data interchange) - 是指按照同一规定的一套通用标准格式,将标准的经济信息,通过通信网络传输,在贸易伙伴的电子计算机系统之间进行数据交换和自动处理.由 ...
- 2016 ACM/ICPC Asia Regional Shenyang Online 1003/HDU 5894 数学/组合数/逆元
hannnnah_j’s Biological Test Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K ...
- 转:db2 backup 及 restore
db2 backup 及 restore 2011-06-21 18:12:20| 分类: AIX |举报 |字号 订阅 两个问题: db2=>list applications db ...
- HDU-5536 Chip Factory (字典树)
题目大意:给n个数,编号为1~n,取三个编号不同的数,使表达式(a+b)^c的值最大. 题目分析:将这n个数按二进制位建立一棵trie.枚举i.j的和,查询亦或最大值,但在查询之前要把i.j在trie ...
- Linux系统编程@进程管理(二)
1.创建守护进程(Deamon) 守护进程的概念与作用 后台服务程序 – 系统服务,进程名字往往以’d’结尾,生存周期比较长(系统装入时启动,关闭时候终止.系统装入两种启动方式:1从启动脚本.etc/ ...
- 黑马程序员——JAVA基础之单列设计模式
------- android培训.java培训.期待与您交流! ---------- 单列设计模式是面试中的一个常考的点,所谓单例模式就是说对象在内存中只能存在一个.如果有其他变量是该类对象,那么他 ...
- MySQL-使用tcpdump排查MySQLl数据库tps飙升的问题
可以直接输出 tcpdump -i eth1 -s -l - | strings | perl -e ' while(<>) { chomp; next if /^[^ ]+[ ]*$/; ...
- linux -redhat rpm 和zabbix和各种rpm包下载地址
redhat ftp://ftp.redhat.com/pub/redhat/linux/enterprise/6Client/en/os/SRPMS/ zabbix https://sourcefo ...