Python中字典映射类型的学习教程


Posted in Python onAugust 20, 2015

字典是python语言中唯一的映射类型,用花括号{}表示,一个字典条目就是一个键值对,方法keys()返回字典的键列表,values()返回字典的值列表,items()返回字典的键值对列表。字典中的值没有任何限制,它们可以是任意python对象,但字典中的键是有类型限制的,每个键只能对应一个值,且键必须是可哈系的,所有不可变类型都是可哈希的。不可变集合frozenset的元素可作为字典的键,但可变集合set就不行了。

以下是字典类型的常用方法。
clear():删除字典中所有元素。
copy():返回字典(浅复制)的一个副本。
fromkeys(seq,val=None):创建并返回一个新字典,以seq中的元素做该字典的键,val做该字典中所有键对应的初始值。
get(key,default=None):返回字典中的键key对应的值value,如果字典中不存在此键,则返回default的值。
has_key(key):如果键key在字典中存在,返回True,否则返回False。python2.2后这个方法几乎已废弃不用了,通常用in来替代。
items():返回一个包含字典中键值对元组的列表。
keys():返回一个包含字典中键的列表。
iter():方法iteritems()、iterkeys()、itervalues()与它们对应的非迭代方法一样,不同的是它们返回一个迭代子,而不是一个列表。
pop(key[,default]):和方法get()类似,如果字典中key键存在,删除并返回dict[key],如果key键不存在,且没有给出default的值,引发KeyError异常。
setdefault(key,default=None):和方法get()相似,如果字典中不存在key键,由dict[key]=default为它赋值。
update(dict2):将字典dict2的键值对添加到当前字典中。
values():返回一个包含字典中所有值的列表。

键可以是多种类型,但键是唯一的不重复的,值可以不唯一

>>> d = {'a':1, 'b':2} 
>>> d 
{'b': 2, 'a': 1} 
>>> L = [('Jonh',18), ('Nancy',19)] 
>>> d = dict(L) #通过包含键值的列表创建 
>>> d 
{'Jonh': 18, 'Nancy': 19} 
>>> T = tuple(L) 
>>> T 
(('Jonh', 18), ('Nancy', 19)) 
>>> d = dict(T) #通过包含键值的元组创建 
>>> d 
{'Jonh': 18, 'Nancy': 19} 
>>> d = dict(x = 1, y = 3) #通过关键字参数创建 
>>> d 
{'x': 1, 'y': 3} 
>>> d[3] = 'z' 
>>> d 
{3: 'z', 'x': 1, 'y': 3}

还有一个创建字典的方法就是 fromkeys(S [ , v]) python里的解释是 New dict with key from S and value equal to v ,即将S里的元素作为键,v作为所有键的值,v 的默认值为 None。可以通过已存在的字典 d 调用 d.fromkeys(S [, v] ) 也可以通过类型调用 dict.fromkeys( S [, v] )

>>> d 
{3: 'z', 'y': 3} 
>>> L1 = [1,2,3] 
>>> d.fromkeys(L1) 
{1: None, 2: None, 3: None} 
>>> {}.fromkeys(L1,'nothing') 
{1: 'nothing', 2: 'nothing', 3: 'nothing'} 
>>> dict.fromkeys(L1,'over') 
{1: 'over', 2: 'over', 3: 'over'}

字典是无序的,所以不能通过索引来获取值,要通过键来找到关联值。对于不存在的键,会出现错误KeyError

>>> d 
{3: 'z', 'x': 1, 'y': 3} 
>>> d[3] 
'z' 
>>> d['x'] 
1 
>>> d[0] 
Traceback (most recent call last): 
 File "<pyshell#26>", line 1, in <module> 
 d[0] 
KeyError: 0

字典操作和方法:
len( d )  返回字典d里面的键值对数目
x in d   查询字典d中是否有键 x

>>> d = {'x':1,'y':3} 
>>> len(d) 
2 
>>> 'x' in d 
True 
>>> 'z' not in d 
True

d [ x ] = y  若键 x 存在,则修改 x 对应的值为 y, 若键 x 不存在,则在字典 d 中增加键值对 x : y

>>> d 
{'x': 1, 'y': 3} 
>>> d['x'] = 1.5 
>>> d 
{'x': 1.5, 'y': 3} 
>>> d['z'] = 5 
>>> d 
{'z': 5, 'x': 1.5, 'y': 3}

del d[x]  删除字典 d 中键为 x 的键值对,若 x 不存在会出现 KeyError

>>> d = {'z': 5, 'x': 1.5, 'y': 3} 
>>> del d['x'] 
>>> d 
{'z': 5, 'y': 3} 
>>> del d['x'] 
Traceback (most recent call last): 
 File "<pyshell#66>", line 1, in <module> 
 del d['x'] 
KeyError: 'x'

d.clear() 清空字典d
d.copy() 对字典 d 进行浅复制,返回一个和d有相同键值对的新字典

>>> d 
{'z': 5, 'y': 3} 
>>> d.copy() 
{'z': 5, 'y': 3}

d.get( x [ , y]) 返回字典 d 中键 x 对应的值,键 x 不存在的时候返回 y, y 的默认值为None

>>> d = {'z': 5, 'x': 1.5, 'y': 3} 
>>> d.get('x') 
1.5 
>>> del d['x'] 
>>> d.get('x') 
>>> d.get('x','nothing') 
'nothing'

d.items() 将字典 d 中所有键值对以dict_items的形式返回(Python 2中d.iteritems() 返回一个针对键值对的迭代器对象,Python 3中没有 iteritems 方法了)

>>> d = {'z': 5, 'x': 1.5, 'y': 3} 
>>> d.items() 
dict_items([('z', 5), ('x', 1.5), ('y', 3)]) 
>>> list(d.items()) 
[('z', 5), ('x', 1.5), ('y', 3)]

d.keys() 将字典 d 中所有的键以dict_keys形式返回(Python 2 中d.iterkeys() 返回一个针对键的迭代器对象,Python 3 没有此语法)

>>> d.keys() 
dict_keys(['z', 'x', 'y']) 
>>> for x in d.keys(): 
 print(x) 
 
  
z 
x 
y

d.pop( x ) 返回给定键 x 对应的值,并将该键值对从字典中删除

>>> d = {'z': 5, 'x': 1.5, 'y': 3} 
>>> d.pop('x') 
1.5 
>>> d.pop('x') 
Traceback (most recent call last): 
 File "<pyshell#92>", line 1, in <module> 
 d.pop('x') 
KeyError: 'x'

d.popitem( ) 返回并删除字典 d 中随机的键值对

>>> d = {'z': 5, 'x': 1.5, 'y': 3} 
>>> d.popitem() 
('z', 5) 
>>> d.popitem() 
('x', 1.5)

d.setdefault( x, [ , y ] )  返回字典 d 中键 x 对应的值,若键 x 不存在,则返回 y, 并将 x : y 作为键值对添加到字典中,y 的默认值为 None

>>> d = {'z': 5, 'x': 1.5, 'y': 3} 
>>> d.setdefault('x') 
1.5 
>>> del d['x'] 
>>> d.setdefault('x','Look!') 
'Look!' 
>>> d 
{'z': 5, 'x': 'Look!', 'y': 3}

d.update( x ) 将字典 x 所有键值对添加到字典 d 中(不重复,重复的键值对用字典 x 中的键值对替代字典 d 中)

>>> d1 = {'x':1, 'y':3} 
>>> d2 = {'x':2, 'z':1.4} 
>>> d1.update(d2) 
>>> d1 
{'z': 1.4, 'x': 2, 'y': 3}

d.values( ) 将字典里所有的值以dict_values 的形式返回(Python 2 中d.itervalues() 返回针对字典d里所有值的迭代器对象,Python 3无此语法)

>>> d1 
{'z': 1.4, 'x': 2, 'y': 3} 
>>> d1.values() 
dict_values([1.4, 2, 3]) 
>>> list(d1.values()) 
[1.4, 2, 3]
Python 相关文章推荐
ssh批量登录并执行命令的python实现代码
May 25 Python
python实现的文件夹清理程序分享
Nov 22 Python
Python编程实现微信企业号文本消息推送功能示例
Aug 21 Python
使用python为mysql实现restful接口
Jan 05 Python
Python3.5 处理文本txt,删除不需要的行方法
Dec 10 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
Aug 08 Python
Python numpy数组转置与轴变换
Nov 15 Python
解决Opencv+Python cv2.imshow闪退问题
Apr 24 Python
python定时截屏实现
Nov 02 Python
Python的代理类实现,控制访问和修改属性的权限你都了解吗
Mar 21 Python
Python matplotlib多个子图绘制整合
Apr 13 Python
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
Apr 24 Python
Python3字符串学习教程
Aug 20 #Python
Python中列表和元组的相关语句和方法讲解
Aug 20 #Python
编写Python脚本抓取网络小说来制作自己的阅读器
Aug 20 #Python
使用Python求解最大公约数的实现方法
Aug 20 #Python
使用Python3编写抓取网页和只抓网页图片的脚本
Aug 20 #Python
详解Python3中yield生成器的用法
Aug 20 #Python
Python中集合的内建函数和内建方法学习教程
Aug 19 #Python
You might like
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
2011/12/25 PHP
php字符串截取的简单方法
2013/07/04 PHP
php中的ini配置原理详解
2014/10/14 PHP
浅谈PHP中try{}catch{}的使用方法
2016/12/09 PHP
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
javascript引用对象的方法代码
2007/08/13 Javascript
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
JS中的prototype与面向对象的实例讲解
2013/05/22 Javascript
使用jQuery实现验证上传图片的格式与大小
2014/12/03 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
jquery轻量级数字动画插件countUp.js使用详解
2019/10/17 jQuery
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
2014/07/09 Python
Python中的自定义函数学习笔记
2014/09/23 Python
python 文件操作api(文件操作函数)
2016/08/28 Python
Python爬取APP下载链接的实现方法
2016/09/30 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
PyTorch线性回归和逻辑回归实战示例
2018/05/22 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
python 获取一个值在某个区间的指定倍数的值方法
2018/11/12 Python
对Python的zip函数妙用,旋转矩阵详解
2018/12/13 Python
jupyter 使用Pillow包显示图像时inline显示方式
2020/04/24 Python
使用Python+Appuim 清理微信的方法
2021/01/26 Python
css3实现可滑动跳转的分页插件示例
2014/05/08 HTML / CSS
英国在线定制百叶窗网站:Swift Direct Blinds
2020/02/25 全球购物
境外导游求职信
2014/02/27 职场文书
对教师的评语
2014/04/28 职场文书
8和9的加减法教学反思
2014/05/01 职场文书
护士实习求职信
2014/06/22 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
家庭教育教师培训学习体会
2016/01/14 职场文书
dubbo集成zipkin获取Traceid的实现
2021/07/26 Java/Android
vue中控制mock在开发环境使用,在生产环境禁用方式
2022/04/06 Vue.js
解决IDEA翻译插件Translation报错更新TTK失败不能使用
2022/04/24 Python