Python入门篇之字典


Posted in Python onOctober 17, 2014

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

dict函数

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

>>> items=[('name','Gumby'),('age',42)]

>>> d=dict(items)

>>> d

{'age': 42, 'name': 'Gumby'}

>>> d['name']

'Gumby'

dict函数也可以通过关键字参数来创建字典:

>>> d=dict(name='Gumby',age=42)

>>> d

{'age': 42, 'name': 'Gumby'}

基本字典操作:

字典的基本行为在很多方面与序列类似:
len(d)返回d中项(键-值对)的数量
d[k]返回关联到键k上的值
d[k]=v将值v关联到键k上
del d[k]删除键为k的项
k in d检查d中是否含有键为k的项
说明:

键类型:字典的键不一定为整型数据,也可能是其他不可变类型

自动添加:即使那个键起始在字典中并不存在,也可以为它分配一个值,这样字典就会建立新的项,而不能将值关联到列表范围之外的索引上

成员资格:表达式k in d(d为字典)查找的是键,而不是值。表达式v in l(l为列表)则用来查找值,而不是索引

字典方法:

1、clear

clear方法清除字典中所有的项,这是个原地操作,所以无返回值

>>> d={}

>>> d['name']='Gumby'

>>> d['age']=42

>>> d

{'age': 42, 'name': 'Gumby'}

>>> return_value=d.clear()

>>> d

{}

>>> print return_value

None

考虑下面两种情况:

>>> x={}

>>> y=x

>>> x['key']='value'

>>> y

{'key': 'value'}

>>> x={}

>>> y

{'key': 'value'}

>>> 

>>> x={}

>>> y=x

>>> x['key']='value'

>>> y

{'key': 'value'}

>>> x.clear()

>>> y

{}

2、copy

copy方法返回一个具有相同键-值对的新字典(这个方法实现的是浅复制)

>>> x={'username':'admin','machines':['foo','bar','baz']}

>>> y=x.copy()

>>> y['username']='mlh'

>>> y['machines'].remove('bar')

>>> y

{'username': 'mlh', 'machines': ['foo', 'baz']}

>>> x

{'username': 'admin', 'machines': ['foo', 'baz']}

从上面的代码可以看到,当副本中替换值的时候,原字典不受影响,但是,如果修改了某个值,原始的字典也会改变

避免这个问题的一种方法就是使用深复制,复制其包含的所有值,可以使用copy模块的deepcopy函数来完成操作:

>>> from copy import deepcopy

>>> d={}

>>> d['names']=['Alfred','Bertrand']

>>> c=d.copy()

>>> dc=deepcopy(d)

>>> d['names'].append('Clive')

>>> c

{'names': ['Alfred', 'Bertrand', 'Clive']}

>>> dc

{'names': ['Alfred', 'Bertrand']}

3、fromkeys

fromkeys方法使用给定的键建立新的字典,每个键默认对应的值为None

>>> {}.fromkeys(['nmae','age'])

{'age': None, 'nmae': None}

4、get

get方法是个更宽松的访问字典项的方法。一般而言,如果试图访问字典中不存在的项时就会出错:

>>> d={}

>>> print d['name']
Traceback (most recent call last):

  File "<pyshell#77>", line 1, in <module>

    print d['name']

KeyError: 'name'

>>> print d.get('name')

使用get就不会

 使用get的简单数据库示例

people={

    'Alice':{

        'phone':'2341',

        'add':'Foo drive 23'

        },

    'Beth':{

        'phone':'934',

        'add':'Bar street 42'

        },

    'Cecil':{

        'phone':'2314',

        'add':'Baz avenue 90'

        }

    }

labels={

    'phone':'phone number',

    'addr':'address'

    }

name=raw_input('Name: ')
#查询电话号码还是地址?

request=raw_input('Phone number (p) or address (a)?')
#使用正确的键:

key=request

if request=='p':key='phone'

if request=='a':key='addr'
person=people.get(name,{})

label=labels.get(key,key)

result=person.get(key,'not available')
print "%s's %s is %s." % (name,label,result)
>>> ================================ RESTART ================================

>>> 

Name: Gumby

Phone number (p) or address (a)?batting average

Gumby's batting average is not available.

5、has_key

has_key方法可以检查字典中是否含有给出的键,表达式d.has_key(k)相当于表达式k in d

>>> d={}

>>> d.has_key('name')

False

>>> d['name']='Eric'

>>> d.has_key('name')

True

6、items和iteritems

items方法将所有的字典项以列表的方式返回,这些列表项中的每一项都来自于(键,值),但是项在返回时并没有特殊的顺序

>>> d={'title':'Python Web Site','url':'http://www.python.org','spam':0}

>>> d.items()

[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')]

iteritems方法的作用大致相同,但是会返回一个迭代器对象而不是列表:

>>> it=d.iteritems()

>>> it

<dictionary-itemiterator object at 0x0280F6F0>

>>> list(it)

[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')]

7、pop

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

>>> d={'x':1,'y':2}

>>> d.pop('x')

1

>>> d

{'y': 2}

8、popitem

popitem方法类似于list.pop,后者会弹出列表的最后一个元素。但是popitem弹出随机的项

>>> d={'title':'Python Web Site','url':'http://www.python.org','spam':0}

>>> d

{'url': 'http://www.python.org', 'spam': 0, 'title': 'Python Web Site'}

>>> d.popitem()

('url', 'http://www.python.org')

>>> d

{'spam': 0, 'title': 'Python Web Site'}

9、setdefault

setdefault方法在某种程度上类似于get方法,除此之外,setdefault还能在字典中不含有给定键的情况下设定相应的键值

>>> d={}

>>> d.setdefault('name','N/A')

'N/A'

>>> d

{'name': 'N/A'}

>>> d['name']='Gumby'

>>> d.setdefault('name','N/A')

'Gumby'

>>> d

{'name': 'Gumby'}

10、update

update方法可以利用一个字典项更新另一个字典:

>>> d={

    'title':'Python Web Site',

    'url':'http://www.python.org',

    'changed':'Mar 14 22:09:15 MET 2008'

    }

>>> x={'title':'Python Langue Website'}

>>> d.update(x)

>>> d

{'url': 'http://www.python.org', 'changed': 'Mar 14 22:09:15 MET 2008', 'title': 'Python Langue Website'}

11、values和itervalues

values方法以列表的形式返回字典中的值(itervalues返回值的迭代器),与返回键的列表不同的是,返回值的列表中可以包含重复的元素:

>>> d={}

>>> d[1]=1

>>> d[2]=2

>>> d[3]=3

>>> d[4]=1

>>> d.values()

[1, 2, 3, 1]
Python 相关文章推荐
使用优化器来提升Python程序的执行效率的教程
Apr 02 Python
python线程池(threadpool)模块使用笔记详解
Nov 17 Python
python逆向入门教程
Jan 15 Python
python下解压缩zip文件并删除文件的实例
Apr 24 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
浅谈numpy生成数组的零值问题
Nov 12 Python
详解python函数的闭包问题(内部函数与外部函数详述)
May 17 Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
Aug 05 Python
python怎么判断模块安装完成
Jun 19 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
Jul 06 Python
Python xlrd/xlwt 创建excel文件及常用操作
Sep 24 Python
Python识别验证码的实现示例
Sep 30 Python
Python入门篇之字符串
Oct 17 #Python
Python入门篇之列表和元组
Oct 17 #Python
Python入门篇之对象类型
Oct 17 #Python
Python入门篇之编程习惯与特点
Oct 17 #Python
python中正则表达式的使用详解
Oct 17 #Python
基于python编写的微博应用
Oct 17 #Python
python连接oracle数据库实例
Oct 17 #Python
You might like
上海永华YH-R296(华普R-96)12波段立体声收音机的分析和打理
2021/03/02 无线电
thinkphp区间查询、统计查询与SQL直接查询实例分析
2014/11/24 PHP
php文件上传你必须知道的几点
2015/10/20 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
PHP中include()与require()的区别说明
2017/02/14 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
js setattribute批量设置css样式
2009/11/26 Javascript
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
基于jQuery的自动完成插件
2011/02/03 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
JS输入用户名自动显示邮箱后缀列表的方法
2015/01/27 Javascript
jquery实现滑动特效代码
2015/08/10 Javascript
jQuery配合coin-slider插件制作幻灯片效果的流程解析
2016/05/13 Javascript
AngularJS入门教程之更多模板详解
2016/08/19 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
vue实现禁止浏览器记住密码功能的示例代码
2021/02/03 Vue.js
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
2015/04/01 Python
对Python 简单串口收发GUI界面的实例详解
2019/06/12 Python
Django中ORM找出内容不为空的数据实例
2020/05/20 Python
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
全球最大的户外用品零售商之一:The House
2018/06/12 全球购物
商务日语毕业生自荐信范文
2013/11/14 职场文书
酒店销售经理岗位职责
2014/01/31 职场文书
电脑专业个人求职信范文
2014/02/04 职场文书
小班幼儿评语大全
2014/04/30 职场文书
公司周年庆活动方案
2014/08/25 职场文书
2014年国庆节庆祝建国65周年比赛演讲稿
2014/09/21 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
2015年底工作总结范文
2015/05/15 职场文书
奖励申请报告范文
2015/05/15 职场文书
关于办理居住证的介绍信模板
2019/11/27 职场文书
Python中threading库实现线程锁与释放锁
2021/05/17 Python
Nginx进程调度问题详解
2021/09/25 Servers