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 相关文章推荐
wxpython 学习笔记 第一天
Mar 16 Python
使用Python脚本操作MongoDB的教程
Apr 16 Python
Python 类的特殊成员解析
Jun 20 Python
Python pymongo模块常用操作分析
Sep 01 Python
浅谈django rest jwt vue 跨域问题
Oct 26 Python
详解python中的index函数用法
Aug 06 Python
python编写简单端口扫描器
Sep 04 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
Dec 10 Python
pyqt5中动画的使用详解
Apr 01 Python
Python requests模块cookie实例解析
Apr 14 Python
python接入支付宝的实例操作
Jul 20 Python
python用tkinter实现一个简易能进行随机点名的界面
Sep 27 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实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
php设置静态内容缓存时间的方法
2014/12/01 PHP
PHP实现递归目录的5种方法
2016/10/27 PHP
php 中self,this的区别和操作方法实例分析
2019/11/04 PHP
PHP7 错误处理机制修改
2021/03/09 PHP
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
2013/07/09 Javascript
jQuery添加options点击事件并传值实例代码
2016/05/18 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
jQuery图片瀑布流的简单实现代码
2017/03/15 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
JavaScript面向对象编程小游戏---贪吃蛇代码实例
2019/05/15 Javascript
vue实现按需加载组件及异步组件功能
2019/05/27 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
python采用getopt解析命令行输入参数实例
2014/09/30 Python
python实现在控制台输入密码不显示的方法
2015/07/02 Python
python批量替换多文件字符串问题详解
2018/04/22 Python
python中subprocess批量执行linux命令
2018/04/27 Python
使用python的turtle绘画滑稽脸实例
2019/11/21 Python
python实现简单井字棋游戏
2020/03/04 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
2020/03/24 Python
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
eDreams意大利:南欧领先的在线旅行社
2018/11/23 全球购物
如何用Lucene索引数据库
2016/02/23 面试题
高中生学习生活的自我评价
2013/11/27 职场文书
网络工程师职业规划
2014/02/10 职场文书
文案策划求职信
2014/03/18 职场文书
健康家庭事迹材料
2014/05/02 职场文书
最美孝心少年事迹材料
2014/08/15 职场文书
党组织结对共建协议书
2016/03/23 职场文书
详解Node.js如何处理ES6模块
2021/05/15 Javascript
MySQL 亿级数据导入导出及迁移笔记
2021/06/18 MySQL
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis
《废话连篇——致新手》——chinapizza
2022/04/05 无线电