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 Web框架Flask中使用七牛云存储实例
Feb 08 Python
Python之日期与时间处理模块(date和datetime)
Feb 16 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
Sep 11 Python
用Python写一段用户登录的程序代码
Apr 22 Python
在python中pandas读文件,有中文字符的方法
Dec 12 Python
python 实现selenium断言和验证的方法
Feb 13 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
Jul 28 Python
python实现生成Word、docx文件的方法分析
Aug 30 Python
python爬取网易云音乐热歌榜实例代码
Aug 07 Python
如何利用pycharm进行代码更新比较
Nov 04 Python
python3中TQDM库安装及使用详解
Nov 18 Python
Python爬虫基础讲解之请求
May 13 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
PHP中HTML标签过滤技巧
2014/01/07 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
PHP获取昨天、今天及明天日期的方法
2016/02/03 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
时间戳转换为时间 年月日时间的JS函数
2013/08/19 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
js中function()使用方法
2013/12/24 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
用jQuery实现可输入多选下拉组合框实例代码
2017/01/18 Javascript
Vue.js常用指令的使用小结
2017/06/23 Javascript
浅谈Vue组件及组件的注册方法
2018/08/24 Javascript
详解vue数组遍历方法forEach和map的原理解析和实际应用
2018/11/15 Javascript
详解vue-cli3 中跨域解决方案
2019/04/10 Javascript
优雅的处理vue项目异常实战记录
2019/06/05 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
Vue关于组件化开发知识点详解
2020/05/13 Javascript
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
2016/06/03 Python
快速解决安装python没有scripts文件夹的问题
2018/04/03 Python
解决python 输出是省略号的问题
2018/04/19 Python
Python continue继续循环用法总结
2018/06/10 Python
python实现人民币大写转换
2018/06/20 Python
Python实现处理逆波兰表达式示例
2018/07/30 Python
xadmin使用formfield_for_dbfield函数过滤下拉表单实例
2020/04/07 Python
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
乌克兰品牌化妆品和香水在线商店:Bomond
2020/01/14 全球购物
先进集体获奖感言
2014/02/13 职场文书
《春笋》教学反思
2014/04/15 职场文书
不遵守课堂纪律的检讨书
2014/09/24 职场文书
劳模先进事迹材料
2014/12/24 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
2016年三八红旗手先进事迹材料
2016/02/26 职场文书
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS
redis lua限流算法实现示例
2022/07/15 Redis