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脚本简单实现打开默认浏览器登录人人和打开QQ的方法
Apr 12 Python
Python设计模式之代理模式简单示例
Jan 09 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
Aug 02 Python
使用pip发布Python程序的方法步骤
Oct 11 Python
对python中字典keys,values,items的使用详解
Feb 03 Python
python协程之动态添加任务的方法
Feb 19 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
Aug 02 Python
pygame实现俄罗斯方块游戏(AI篇2)
Oct 29 Python
解决springboot yml配置 logging.level 报错问题
Feb 21 Python
python 线程的五个状态
Sep 22 Python
Numpy中np.max的用法及np.maximum区别
Nov 27 Python
python之PySide2安装使用及QT Designer UI设计案例教程
Jul 26 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缓冲 output_buffering的使用详解
2013/06/13 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
thinkPHP批量删除的实现方法分析
2016/11/09 PHP
Laravel多域名下字段验证的方法
2019/04/04 PHP
js计数器代码
2006/11/04 Javascript
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
JQuery中Text方法用法实例分析
2015/05/18 Javascript
jQuery动态改变多行文本框高度的方法
2016/09/07 Javascript
基于node.js制作简单爬虫教程
2017/06/29 Javascript
基于hover的用法实例(推荐)
2017/07/04 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
Javascript防止图片拉伸的自适应处理方法
2017/12/26 Javascript
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
VUE+elementui面包屑实现动态路由详解
2019/11/04 Javascript
js中关于Blob对象的介绍与使用
2019/11/29 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
python 测试实现方法
2008/12/24 Python
Python Web开发模板引擎优缺点总结
2014/05/06 Python
python获取一组汉字拼音首字母的方法
2015/07/01 Python
Django中的CACHE_BACKEND参数和站点级Cache设置
2015/07/23 Python
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
Django如何实现内容缓存示例详解
2017/09/24 Python
linux安装python修改默认python版本方法
2019/03/31 Python
Django实现基于类的分页功能
2019/10/31 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
Python实现屏幕录制功能的代码
2020/03/02 Python
python利用Excel读取和存储测试数据完成接口自动化教程
2020/04/30 Python
python redis存入字典序列化存储教程
2020/07/16 Python
Python自动发送和收取邮件的方法
2020/08/12 Python
Python3 用什么IDE开发工具比较好
2020/11/28 Python
惠普美国官方商店:HP Official Store
2016/08/28 全球购物
实习生评语
2014/04/26 职场文书
大学迎新标语
2014/06/26 职场文书
党支部四风整改方案
2014/10/25 职场文书
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js