《Python基础教程(第二版)》学习笔记 -> 第四章 字典
字典是Python中唯一内建的映射类型。
字典中的值并没有特殊的顺序,但是都存储在一个特定的键(Key)里。键可以是数字、字符串甚至是元组。
字典的使用
某些情况下,字典比列表更加适用:
- 表征游戏棋盘的状态,每个键都是由坐标组成的元组;
- 存储文件修改次数,用文件名作为键;
- 数字电话/地址簿
创建和使用字典
字典由多个键及与其对应的值构成的对组成。示例:
>>> phonebook = {'}
>>> phonebook['a']
'
上例中,字母是键,数字是值。每个键和它的值之间用冒号(:)隔开,项之间用逗号(,)隔开,而整个字典是由一堆大括号括起来。空字典仅由两个大括号组成。
- dict 函数
可以用dict 函数,通过其它映射(比如其它字典)或者(键,值)这样的序列对建立字典。>>> items = [('name','Gumby'),('age',42)] >>> d = dict(items) >>> d {'age': 42, 'name': 'Gumby'} >>> d['name'] 'Gumby'dict 函数也可以通过关键字参数来创建字典:
>>> d = dict(name = 'Python', level = 5) >>> d {'name': 'Python', 'level': 5} - 基本字典操作
字典的基本行为在很多方面与序列(sequence)类似:
①len(d)返回d中项(键-值对)的数量;
②d[k]返回关联到键k上的值;
③d[k]=v 将值v关联到键k上;
④del d[k]删除键为k的项;
⑤k in d检查d中是否含有键为k的项。
字典和列表的区别:
①键类型: 字典的键不一定为整形数据。
②自动添加:即使那个键起初在字典中并不存在,也可以为它分片一个值,这样字典会建立新的项。而列表不能关联到索引范围外。
③成员资格:表达式 k in d(d为字典)查找的是键,而不是值。表达式v in l(l为列表)则用来查找值,而不是索引 - 字典的格式化字符串
>>> phonebook = {'} >>> "Beth's phone number is %(Beth)s"%phonebook "Beth's phone number is 110"
字典方法
- clear
clear 方法清字典中所有的项。>>> d = {'a':'b'} >>> d.clear() >>> d {} - copy
copy方法返回一个具有相同键-值对的新字典(这个方法实现的是浅复制(shallw copy))>>> x = {'username':'admin','machine':['foo','bar','baz']} >>> y = x.copy() >>> x {'username': 'admin', 'machine': ['foo', 'bar', 'baz']} >>> y['username'] = 'tester' >>> y['machine'].remove('foo') >>> x {'username': 'admin', 'machine': ['bar', 'baz']} >>> y {'username': 'tester', 'machine': ['bar', 'baz']}可以看到,在副本中替换值的时候,原始字典不受影响,如果修改了某个值,原始的字典也会改变。
避免这个问题的一种方法就是使用深复制(deep copy)
>>> from copy import deepcopy >>> d = {} >>> d['names'] = ['Alfred','Bertrand'] >>> c = d.copy() >>> dc = deepcopy(d) >>> d['names'].append('Python') >>> c {'names': ['Alfred', 'Bertrand', 'Python']} >>> d {'names': ['Alfred', 'Bertrand', 'Python']} >>> dc {'names': ['Alfred', 'Bertrand']} - fromkeys
fromkeys方法使用给定的键建立新的字典,每个键默认对应的值为None>>> {}.fromkeys(['name','age']) {'age': None, 'name': None}如果不想使用None作为默认值,也可以自己提供默认值:
>>> {}.fromkeys(['name','age'],'(defalut value)') {'age': '(defalut value)', 'name': '(defalut value)'} - get
当使用get访问一个不存在的键时,没有任何异常,而得到了None值。还可以自定义“默认的值”,替换None>>> d = {} >>> d.get('name','n/a') 'n/a' - has_key
has_key 方法可以检查字典中是否含有给出的键。表达式d.has_key(k),相当于k in d>>> d = {} >>> d.has_key('name') False >>> d['name'] = 'py' >>> d.has_key('name') True - items 和 iteritems
items 方法将所有的字典以列表方式返回,这些列表项中的每一项都来自于(键,值)。但是项在返回时没有特殊的顺序。>>> d = {'title':'Python','body':'tester'} >>> d.items() [('body', 'tester'), ('title', 'Python')]iteritems方法的作用大致相同,但是会返回一个迭代器对象而不是列表:
>>> it = d.iteritems() >>> it <dictionary-itemiterator object at 0x012199F0> >>> list(it) [('body', 'tester'), ('title', 'Python')] - keys 和 iterkeys
keys方法将字典中的键以列表的形式返回,iterkeys则返回针对键的迭代器。 - pop
pop方法用来获得对应于给定键的值,然后将这个键-值对从字典中移除。>>> d = {'a':'b','c':'d'} >>> d.pop('c') 'd' >>> d {'a': 'b'} - popitem
popitem弹出随机的项,因为字典没有“最后的元素”或者其他关于顺序的概念。>>> d = {'a':'b','c':'d','e':'f','g':'h'} >>> d.popitem() ('a', 'b') >>> d {'c': 'd', 'e': 'f', 'g': 'h'} - setdefault
setdefault 方法在某种程度上类似于get方法,就是能获得与给定键相关联的值,除此之外,setdefault还能在字典中不含有给定键的情况下设定相应的键值。>>> d = {} >>> d.setdefault('name','n/a') 'n/a' >>> d {'name': 'n/a'} >>> d['name'] = 'Python' >>> d.setdefault('name','n/a') 'Python' >>> d {'name': 'Python'}可以看到,当键不存在的时候,setdefault返回默认值并且相应地更新字典。如果键存在,那么就返回与其对应的值,但不改变字典
- update
>>> d = {'title':'python','body':'tester','footer':'fighting'} >>> x = {'title':'position'} >>> d.update(x) >>> d {'body': 'tester', 'footer': 'fighting', 'title': 'position'} - values 和 itervalues
>>> d = {} >>> d[1] = 1 >>> d[2] = 2 >>> d[3] = 3 >>> d[4] = 4 >>> d[5] = 1 >>> d.values() [1, 2, 3, 4, 1]values方法以列表的形式返回字典中的值。返回值列表可以包含重复的值。
小结:
映射:映射可以使用任何不变对象标识元素,最 常用的类型是字符串和元组。
《Python基础教程(第二版)》学习笔记 -> 第四章 字典的更多相关文章
- <<Python基础教程>>学习笔记 | 第04章 | 字典
第04章:字典 当索引不好用时 Python唯一的内建的映射类型,无序,但都存储在一个特定的键中.键能够使字符.数字.或者是元祖. ------ 字典使用: 表征游戏棋盘的状态,每一个键都是由坐标值组 ...
- <<Python基础教程>>学习笔记 | 第10章 | 充电时刻
第10章 | 充电时刻 本章主要介绍模块及其工作机制 ------ 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 一个简 ...
- <<Python基础教程>>学习笔记 | 第12章 | 图形用户界面
Python支持的工具包非常多.但没有一个被觉得标准的工具包.用户选择的自由度大些.本章主要介绍最成熟的跨平台工具包wxPython.官方文档: http://wxpython.org/ ------ ...
- <<Python基础教程>>学习笔记 | 第11章 | 文件和素材
打开文件 open(name[mode[,buffing]) name: 是强制选项,模式和缓冲是可选的 #假设文件不在.会报以下错误: >>> f = open(r'D:\text ...
- Jquery基础教程第二版学习记录
本文仅为个人jquery基础的学习,简单的记录以备忘. 在线手册:http://www.php100.com/manual/jquery/第一章:jquery入门基础jquery知识:jquery能做 ...
- 第二章、元组和列表(python基础教程第二版 )
最基本的数据结构是序列,序列中每个元素被分配一个序号-元素的位置,也称索引.第一个索引为0,最后一个元素索引为-1. python中包含6种内建的序列:元组.列表.字符串.unicode字符串.buf ...
- python基础教程第二版 第一章
1.模块导入python以增强其功能的扩展:三种方式实现 (1). >>> Import math >>> math.floor(32.9) 32.0 #按照 模块 ...
- <<Python基础课程>>学习笔记 | 文章13章 | 数据库支持
备注:本章介绍了比较简单,只是比较使用样品,主要假设是把握连接,利用数据库.和SQLite做演示样本 ------ Python数据库API 为了解决Python中各种数据库模块间的兼容问题,如今已经 ...
- python cookbook第三版学习笔记十四:类和对象(五)代理类以及内存回收
代理类: 代理类的作用其实有继承有些类似,如果你想将某个实例的属性访问代理到内部另外一个实例中去,可以用继承也可以用代理.来看下代理的应用: class A: def spam(self,x) ...
随机推荐
- ios 8和iOS 9 适用的uidatepicker
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"\n\n\n\n\n\n ...
- springMVC数据封装成POJO
springMVC把前台的数据封装为POJO与struts2的封装形式不同.struts2需要在控制器声明需封装的POJO,而springMVC不需要任何准备工作,只需在相应的方法的参数中加上需封装的 ...
- 【数位DP】Hdu 2089:不要62
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 【扩展欧几里得】Bzoj 1407: [Noi2002]Savage
Description Input 第1行为一个整数N(1<=N<=15),即野人的数目.第2行到第N+1每行为三个整数Ci, Pi, Li (1<=Ci,Pi<=100, 0 ...
- 利用钩子函数来捕捉键盘响应的windows应用程序
一:引言: 你也许一直对金山词霸的屏幕抓词的实现原理感到困惑,你也许希望将你的键盘,鼠标的活动适时的记录下来,甚至你想知道木马在windows操作系统是怎样进行木马dll的加载的…..其实这些都是用到 ...
- 破解之寻找OEP[手动脱壳](1)
OEP:(Original Entry Point),程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳. PUSHAD (压栈) 代表程序的 ...
- 关于hibernate中双向外键关联one-to-one的property-ref=的问题(转)
大家都知道hibernate中的one-to-one映射主要有两种策略,(1)一对一主键关联(单向和双向).(2)一对一外键映射(单项和双向).本文主要讲解一下,一对一外键映射中的双向问题,在此前先通 ...
- linux更改shell
1.查看机器安装了哪些shell? 有两种方法可以查看. 第一种: 使用env命令查看环境变量里面的shell信息第二种: $ cat /etc/shells 2.查看当前正在使用的shell是哪个? ...
- linux动态库默认搜索路径设置的三种方法
众所周知, Linux 动态库的默认搜索路径是 /lib 和 /usr/lib .动态库被创建后,一般都复制到这两个目录中.当程序执行时需要某动态库, 并且该动态库还未加载到内存中,则系统会自动到这两 ...
- linux系统相关的任务[fg、bg、jobs、&、ctrl + z]
转自: http://blog.chinaunix.net/space.php?uid=20697318&do=blog&id=1891382 fg.bg.jobs.&.ctr ...