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 相关文章推荐
Python字符编码判断方法分析
Jul 01 Python
Python tkinter模块中类继承的三种方式分析
Aug 08 Python
python使用os.listdir和os.walk获得文件的路径的方法
Dec 16 Python
详解Python判定IP地址合法性的三种方法
Mar 06 Python
Python2和Python3之间的str处理方式导致乱码的讲解
Jan 03 Python
Django CSRF跨站请求伪造防护过程解析
Jul 31 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
Aug 23 Python
Python3.7 pyodbc完美配置访问access数据库
Oct 03 Python
pytorch之ImageFolder使用详解
Jan 06 Python
Linux系统下升级pip的完整步骤
Jan 31 Python
python实现发送邮件
Mar 02 Python
Python常遇到的错误和异常
Nov 02 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安全配置
2006/10/09 PHP
php的curl实现get和post的代码
2008/08/23 PHP
php中$_REQUEST、$_POST、$_GET的区别和联系小结
2011/11/23 PHP
php float不四舍五入截取浮点型字符串方法总结
2013/10/28 PHP
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
(function($){...})(jQuery)的意思
2010/07/22 Javascript
jQuery判断密码强度实现思路及代码
2013/04/24 Javascript
javascript中style.left和offsetLeft的用法说明
2014/03/07 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
Base64(二进制)图片编码解析及在各种浏览器的兼容性处理
2017/02/09 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
JS实现的四级密码强度检测功能示例
2017/05/11 Javascript
利用vue.js把静态json绑定bootstrap的table方法
2018/08/28 Javascript
如何使用vuex实现兄弟组件通信
2018/11/02 Javascript
在微信小程序中保存网络图片
2019/02/12 Javascript
微信小程序 swiper 组件遇到的问题及解决方法
2019/05/26 Javascript
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
2020/09/04 Javascript
详解JavaScript中的数据类型,以及检测数据类型的方法
2020/09/17 Javascript
React实现todolist功能
2020/12/28 Javascript
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
[01:09:20]NB vs NAVI Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
python中的五种异常处理机制介绍
2014/09/02 Python
使用Python脚本生成随机IP的简单方法
2015/07/30 Python
简单实现python收发邮件功能
2018/01/05 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
Python变量类型知识点总结
2019/02/18 Python
使用pip安装python库的多种方式
2019/07/31 Python
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
职业规划书如何设计?
2014/01/09 职场文书
新学期决心书
2014/03/11 职场文书
pytorch中[..., 0]的用法说明
2021/05/20 Python
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python
MySQL优化常用的19种有效方法(推荐!)
2022/03/17 MySQL