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网络编程学习笔记(二):socket建立网络客户端
Jun 09 Python
深入Python函数编程的一些特性
Apr 13 Python
利用Python实现颜色色值转换的小工具
Oct 27 Python
python编程羊车门问题代码示例
Oct 25 Python
Python实现将HTML转换成doc格式文件的方法示例
Nov 20 Python
不知道这5种下划线的含义,你就不算真的会Python!
Oct 09 Python
Python第三方Window模块文件的几种安装方法
Nov 22 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
Python中asyncio模块的深入讲解
Jun 10 Python
python实现视频读取和转化图片
Dec 10 Python
Python监控服务器实用工具psutil使用解析
Dec 19 Python
地图可视化神器kepler.gl python接口的使用方法
Dec 22 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
ThinkPHP使用UTFWry地址库进行IP定位实例
2014/04/01 PHP
Zend Framework框架路由机制代码分析
2016/03/22 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
Thinkphp自定义生成缩略图尺寸的方法
2019/08/05 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
2009/11/24 Javascript
JavaScript内核之基本概念
2011/10/21 Javascript
javascript 全选与全取消功能的实现代码
2012/12/23 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
2014/03/12 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
js钢琴按钮波浪式图片排列效果代码分享
2015/08/26 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
2016/01/05 Javascript
Jquery zTree 树控件异步加载操作
2016/02/25 Javascript
Angular.Js的自动化测试详解
2016/12/09 Javascript
layer弹出层框架alert与msg详解
2017/03/14 Javascript
NodeJS收发GET和POST请求的示例代码
2017/08/25 NodeJs
代码详解JS操作剪贴板
2018/02/11 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
详解Vue.js iview实现树形权限表(可扩展表)
2018/09/30 Javascript
vue+axios+promise实际开发用法详解
2018/10/15 Javascript
vue组件定义,全局、局部组件,配合模板及动态组件功能示例
2019/03/19 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
JQuery插件tablesorter表格排序实现过程解析
2020/05/28 jQuery
[10:18]2018DOTA2国际邀请赛寻真——找回自信的TNCPredator
2018/08/13 DOTA
在django admin中添加自定义视图的例子
2019/07/26 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
Python Django路径配置实现过程解析
2020/11/05 Python
英国领先的狗和宠物美容专家:Christies Direct
2017/04/03 全球购物
优秀的计算机专业求职信范文
2013/12/27 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
团队会宣传标语
2014/10/09 职场文书
JavaScript架构搭建前端监控如何采集异常数据
2022/06/25 Javascript