python创建和使用字典实例详解


Posted in Python onNovember 01, 2013

字典是python中唯一内建的映射类型。字典中的值并没有特殊的顺序,但是都存储在一个特定的键(key)里。
键可以是数字,字符串甚至是元组。
1. 创建和使用字典
字典可以通过下面的方式创建:

phonebook = {'Alice':'2341','Beth':'9102','Ceil':'3258'}

字典由多个键及与其对应的值构成的对组成。每个键和它的值之间用冒号(:)隔开,项之间用逗号(,)隔开,而整个字典是由一对大括号括起来。空字典:{}

1.1 dict函数
可以用dict函数通过映射(比如其他字典)或者(键,值)这样的序列建立字典。

>>> items = [('name','Gumby'),('age'.42)]
>>> d = dict(items)
>>> d
{'age':42,'name':'Gumby'}
>>> d = dict(name='Gumby','age'=42)
>>> d
{'age':42,'name':'Gumby'}

1.2 基本字典操作
(1)len(d)返回d中项(键-值对)的数量;
(2)d[k]返回关联到k上的值;
(3)d[k]=v将值v关联到键k上;
(4)del d[k]删除键为k的项;
(5)k in d检查d中是否有含键为k的项;

1.3 字典的格式化字符串
字典格式化字符串:在每个转换说明符中的%字符后面,可以加上(用圆括号括起来的)键,后面再跟上其他说明元素。
只要所有给出的键都能在字典中找到,就可以获得任意数量的转换说明符。

>>> temple = ‘the price of cake is $%(cake)s,the price of milk of cake is $%(milk)s. $%(cake)s is OK'
>>> price = {'cake':4,'milk':5}
>>>print temple % price
‘the price of cake is $4,the price of milk of cake is $5. $4 is OK'

1.4 字典方法
1.4.1 clear
clear方法清除字典中所有的项,这是个原地操作,无返回值(或者说返回none)。
考虑下面2种情况:
a.将x关联到一个新的空字典来清空它,这对y一点影响都没有,y还是关联到原先的字典
>>> x = {}
>>> y = x
>>> x['key'] = 'value'
>>> y
{'key':'value'}
>>> x = {}
>>> y
{'key':'value'}

b.如果想清空原始字典中所有的元素,必须用clear方法。
>>> x = {}
>>> y = x
>>> x['key'] = 'value'
>>> y
{'key':'value'}
>>> x.clear()
>>> y
{}

1.4.2 copy
copy方法返回一个具有相同键-值对的新字典(这个方法实现的是浅复制,因为值本身是相同的,而不是副本)
在副本中替换值时,原始字典不受影响,但是如果修改了某个值,原始字典会改变。]
>>> x = {'a':1,'b':[2,3,4]}
>>> y = x.copy()
>>> y['a'] = 5
>>> y['b'].remove(3)
>>> y 
 {'a':5,'b':[2,4]}
>>> x
 {'a':1,'b':[2,4]}

避免这个问题的方法是使用深度复制-deepcopy(),复制其包含所有的值。
>>> x = {'a':1,'b':[2,3,4]}
>>> y = x.copy()
>>> z = x.deepcopy()
>>> x['a'].append(5)
>>> y 
 {'a':1,5,'b':[2,3.4]}
>>> z
 {'a':1,'b':[2,3,4]}

1.4.3 fromkeys
fromkeys方法使用给定的键建立新的字典,每个键默认对应的值为None,可以直接在所有字典的类型dict上调用此方法。如果不想使用默认值,也可以自己提供值。
>>> {}.fromkeys(['name','age'])
{'age':None,'name':None}
>>>
>>> dict.fromkeys(['name','age'],'unknow')
{'age':'unknow','name':'unknow'}

1.4.4 get
get方法是个更宽松的访问字典项的方法。当使用get访问一个不存在的键时,会得到None值。还可以自定义“默认”值,替换None。
>>> d = {}
>>> print d.get('name')
None
>>> d.get("name",'N/A')
'N/A'
>>> d[''name] = 'Eric'
>>> d.get('name')
'Eric'

1.4.5 has_key
has_key方法可以检查字典中是否含有给出的键。d.has_key(k)
>>> d = {}
>>> d.has_key('name')
False

1.4.6 items和iteritems
items方法将所有的字典项以列表方式返回,但是列表中的每一项(键,值)返回时并没有特殊的顺序。iteritems方法的作用大致相同,但是会返回一个迭代器对象而不是列表:
>>> d = {'a':1,'b':2,'c':3}
>>>d.items
[('a',1),('b',2),('c',3)]
>>> it = d.iteritems()
>>> it
<dictionary-iteritems object at 169050>
>>> list(it)
[('a',1),('b',2),('c',3)]

1.4.7 keys和iterkeys
keys方法将字典中的键以列表形式返回,而iterkeys则返回针对键的迭代器。

1.4.8 pop方法
pop方法用来获得对应给定键的值,然后将这个键-值对从字典中移除。

>>> d = {'a':1,'b':2,'c':3}
>>> d.pop('a')
>>> d
{'b':2,'c':3}

1.4.10 setdefault
setdefault方法在某种程度上类似于get方法,就是能够获得与给定键相关联的值,还能在字典中不含有给定键的情况下设定相应的键值。
>>> d = {}
>>> d.setdefault('name','N/A')
'N/A'
>>> d
{'name': 'N/A'}
>>> d.setdefault('name',A)
'N/A'

如上例,当键存在时,返回默认值(可选)并且相应地更新字典,如果键存在,那么返回与其对应的值,但不改变字典。

1.4.11 update
update方法可以利用一个字典项更新另一个字典。提供的字典项会被添加到旧的字典中,若有相同的键则会进行覆盖。

>>> d = {'a':1,'b':2,'c':3}
>>> x = {'a':5,'d':6}
>>> d.update(x)
>>> d
{'a': 5, 'c': 3, 'b': 2, 'd': 6}

1.4.12 values和itervalues
values方法以列表的形式返回字典中的值(itervalues返回值的迭代器),与返回键的列表不同的是,返回值列表中可以包含重复的元素。
>>> d = {}
>>> d[1]=1
>>> d[2]=2
>>> d[3]=3
>>> d[4]=1
>>> d
{1: 1, 2: 2, 3: 3, 4: 1}
>>> d.values()
[1, 2, 3, 1]

Python 相关文章推荐
Python中的各种装饰器详解
Apr 11 Python
详解duck typing鸭子类型程序设计与Python的实现示例
Jun 03 Python
总结网络IO模型与select模型的Python实例讲解
Jun 27 Python
Python使用OpenCV进行标定
May 08 Python
python3 面向对象__类的内置属性与方法的实例代码
Nov 09 Python
python读取并写入mat文件的方法
Jul 12 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
Python英文文章词频统计(14份剑桥真题词频统计)
Oct 13 Python
python实现最短路径的实例方法
Jul 19 Python
Django URL参数Template反向解析
Nov 24 Python
pytorch训练神经网络爆内存的解决方案
May 22 Python
利用python实时刷新基金估值(摸鱼小工具)
Sep 15 Python
python分割和拼接字符串
Nov 01 #Python
python list语法学习(带例子)
Nov 01 #Python
python读取Android permission文件
Nov 01 #Python
Python读写Excel文件的实例
Nov 01 #Python
Python修改Excel数据的实例代码
Nov 01 #Python
Python获取apk文件URL地址实例
Nov 01 #Python
Python urllib模块urlopen()与urlretrieve()详解
Nov 01 #Python
You might like
50个PHP程序性能优化的方法
2014/06/02 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
2017/11/08 PHP
PHP基于面向对象实现的留言本功能实例
2018/04/04 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
jquery一句话全选/取消全选
2011/03/01 Javascript
jquery加载页面的方法(页面加载完成就执行)
2011/06/21 Javascript
js 一个关于图片onload加载的事
2013/11/10 Javascript
JavaScript实现大数的运算
2014/11/24 Javascript
一系列Bootstrap导航条使用方法分享
2016/04/29 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
2016/06/01 Javascript
Javascript随机标签云代码实例
2016/06/21 Javascript
jQuery获取浏览器类型和版本号的方法
2016/07/05 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
jQuery实现锚点向下平滑滚动特效示例
2017/08/29 jQuery
Webpack devServer中的 proxy 实现跨域的解决
2018/06/15 Javascript
利用Promise自定义一个GET请求的函数示例代码
2019/03/20 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
vue项目中锚点定位替代方式
2019/11/13 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
2020/06/04 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
[00:12]2018DOTA2亚洲邀请赛SOLO赛 MidOne是否中单第一人?
2018/04/05 DOTA
《Python之禅》中对于Python编程过程中的一些建议
2015/04/03 Python
Python代理IP爬虫的新手使用教程
2019/09/05 Python
tensorflow 限制显存大小的实现
2020/02/03 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
2020/06/01 Python
什么是Python中的匿名函数
2020/06/02 Python
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
英国文胸专家:AmpleBosom.com
2018/02/06 全球购物
成龙霸王洗发水广告词
2014/03/14 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
公司采购主管岗位职责
2014/06/17 职场文书
班级标语大全
2014/06/21 职场文书
新娘婚礼答谢词
2015/09/29 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers
整理Python中常用的conda命令操作
2021/06/15 Python