Python中字典的基础知识归纳小结


Posted in Python onAugust 19, 2015

定义一个字典

>>> d = {"server":"mpilgrim", "database":"master"} 1
>>> d
{'server': 'mpilgrim', 'database': 'master'}
>>> d["server"]         2
'mpilgrim'
>>> d["database"]         3
'master'
>>> d["mpilgrim"]         4
Traceback (innermost last):
  File "<interactive input>", line 1, in ?
KeyError: mpilgrim

首先,我们创建了一个拥有两个元素的新字典,并将其赋值给变量 d。每一个元素都是一个键-值对,整个元素集合用大括号括起来。
server 是一个键字,它所关联的值为 mpilgrim,用 d["server"] 来引用。
database 是一个键字,它所关联的值为 master,用 d["database"] 来引用。
 

你可以通过键字来得到值,但是不能通过值得到键字。所以 d["server"] 为 mpilgrim,但是使用 d["mpilgrim"] 会引发一个异常,因为 mpilgrim 不是一个键字。

修改一个字典

>>> d
{'server': 'mpilgrim', 'database': 'master'}
>>> d["database"] = "pubs" 1
>>> d
{'server': 'mpilgrim', 'database': 'pubs'}
>>> d["uid"] = "sa"  2
>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'pubs'}

不能在一个字典中有重复的键字。给一个存在的键字赋值会抹掉原来的值。

可以在任何时候加入新的键-值对。这种语法同修改存在的值一样。(是的,它可能某天会给你带来麻烦,你可能认为增加了新值,但实际上只是反复地修改了同样的值,因为你的键字没有按照你的想象改变。)

注意新的元素(键字为 uid,值为 sa)出现在字典中间。实际上,它只不过是一种巧合,在第一个例子中的元素看上去是有序的。现在它们看上去无序了则更是一种巧合。

Note

字典没有元素顺序的概念。说元素顺序乱了是不正确的,它们只是简单的无序。这是一个重要的特性,它会在你想要以一种特定的,可重复的顺序(象以键字的字母表顺序)存取字典元素的时候骚扰你。有一些实现的方法,它们只是没有加到字典中去。

在字典中混用数据类型

>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'pubs'}
>>> d["retrycount"] = 3 1
>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 'retrycount': 3}
>>> d[42] = "douglas" 2
>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 42: 'douglas', 'retrycount': 3}

字典不是只用于字符串。字典的值可以是任意数据类型,包括字符串,整数,对象,或者甚至其它的字典。在一个单个字典里,字典的值并不需要全都是同一数据类型,可以根据需要混用和配匹。
字典的关键字要严格一些,但是它们可以是字符串,整数和几种其它的类型(后面还会谈到这一点)。也可以在一个字典中混用和配匹关键字。

从字典中删除元素

>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 42: 'douglas', 'retrycount': 3}
>>> del d[42] 1
>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 'retrycount': 3}
>>> d.clear() 2
>>> d
{}

del 允许你根据键字将单个元素从字典中删除。
clear 会删除一个字典中所有元素。注意空的大括号所表示的集合说明一个字典没有元素。

字符串是大小写敏感

>>> d = {}
>>> d["key"] = "value"
>>> d["key"] = "other value" 1
>>> d
{'key': 'other value'}
>>> d["Key"] = "third value" 2
>>> d
{'Key': 'third value', 'key': 'other value'}

将一个值赋给一个存在的字典关键字只是简单的用新值替换旧值。

这样做不会将一个值赋给一个存在的字典关键字,因为在Python中字符串是大小写敏感的,所以 'key' 与 'Key' 是不同的。这样就在字典中生成了一个新的键/值对。对你来说可能差不多,但对于Python来说,完全是不同的。

如何访问字典中的值:

>>> dict2 = {'name':'earth','port':80}  

>>> for key in dict2.keys():     

... print 'key=%s,value=%s' %(key,dict2[key])

...

key=name,value=earth

key=port,value=80


>>> for key in dict2:       

... print 'key=%s,value=%s' %(key,dict2[key])

...

key=name,value=earth

key=port,value=80

获取字典某个元素值:

>>> dict2['name']

'earth'

>>> print 'host %s is running on port %d' %(dict2['name'],dict2['port'])

host earth is running on port 80

检查字典中是否有某个键的方法 has_key()或in,not in

>>> 'name' in dict2

True

>>> 'server' in dict2

False

>>> 'name' in dict2 

True

>>> dict2['name']

'earth'

>>> dict2.has_key('server')

False

>>> dict2.has_key('name') 

True

一个字典中混用数字和字符串的例子:

>>> dict3 = {}

>>> dict3[1] = 'abc'

>>> dict3['1'] = 3.14159

>>> dict3[3.2] = 'xyz'

>>> dict3

{'1': 3.14159, 1: 'abc', 3.2: 'xyz'}

整体赋值:

>>> dict3 = {'1': 3.14159, 1: 'abc', 3.2: 'xyz',33:'hehe'}

>>> dict3

{'1': 3.14159, 1: 'abc', 3.2: 'xyz', 33: 'hehe'}

更新字典:

>>> dict2['name'] = 'venus'

>>> dict2['port'] = 6969

>>> dict2['arch'] = 'sunos5'

>>> print 'host %(name)s is running on port %(port)d' %dict2

host venus is running on port 6969

删除字典元素和字典

>>> dict2

{'arch': 'sunos5', 'name': 'venus', 'port': 6969}

>>> del dict2['name']

>>> dict2

{'arch': 'sunos5', 'port': 6969}

>>> dict2.clear()

>>> dict2

{}

>>> del dict2

>>> dict2

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

NameError: name 'dict2' is not defined

>>> dict3

{'1': 3.14159, 1: 'abc', 3.2: 'xyz', 33: 'hehe'}

>>> dict3.pop(33) 

'hehe'

>>> dict3

{'1': 3.14159, 1: 'abc', 3.2: 'xyz'}

注:避免使用内建对象名字作为变量的标识符

类似: dict,list,file,bool,str,input,len

Python 相关文章推荐
Python使用lxml模块和Requests模块抓取HTML页面的教程
May 16 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
Jan 24 Python
python 基本数据类型占用内存空间大小的实例
Jun 12 Python
python3去掉string中的标点符号方法
Jan 22 Python
详解Python装饰器
Mar 25 Python
pyqt5 获取显示器的分辨率的方法
Jun 18 Python
python实现ip代理池功能示例
Jul 05 Python
Python提取PDF内容的方法(文本、图像、线条等)
Sep 25 Python
Django中密码的加密、验密、解密操作
Dec 19 Python
python实现邮件循环自动发件功能
Sep 11 Python
Pycharm中如何关掉python console
Oct 27 Python
python分分钟绘制精美地图海报
Feb 15 Python
Python在Windows和在Linux下调用动态链接库的教程
Aug 18 #Python
Python中map,reduce,filter和sorted函数的使用方法
Aug 17 #Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
Aug 16 #Python
使用Python操作MySQL的一些基本方法
Aug 16 #Python
Python中list列表的一些进阶使用方法介绍
Aug 15 #Python
Python中的super()方法使用简介
Aug 14 #Python
在Python中使用正则表达式的方法
Aug 13 #Python
You might like
预告映像公开!第1章续篇剧场版动画《Princess Principal Crown Handler》4月10日上映!
2020/03/06 日漫
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
getimagesize获取图片尺寸实例
2014/11/15 PHP
基于laravel belongsTo使用详解
2019/10/18 PHP
面向对象的Javascript之一(初识Javascript)
2012/01/20 Javascript
Extjs显示从数据库取出时间转换JSON后的出现问题
2012/11/20 Javascript
原生js操作checkbox用document.getElementById实现
2013/10/12 Javascript
jquery日历控件实现方法分享
2014/03/07 Javascript
jQuery中noConflict()用法实例分析
2015/02/08 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
jquery trigger函数执行两次的解决方法
2016/02/29 Javascript
Bootstrap实现水平排列的表单
2016/07/04 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
微信小程序实现复选框效果
2018/12/28 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
微信小程序实现列表滚动头部吸顶的示例代码
2020/07/12 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
Antd表格滚动 宽度自适应 不换行的实例
2020/10/27 Javascript
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
flask中的wtforms使用方法
2018/07/21 Python
ZINVO手表官网:男士和女士手表
2019/03/10 全球购物
必须要使用游标的SQL语句有那些
2012/05/07 面试题
Linux机考试题
2015/10/16 面试题
会计自我鉴定
2013/11/02 职场文书
《世界多美呀》教学反思
2014/03/02 职场文书
情况说明书格式范文
2014/05/06 职场文书
承诺保证书格式
2015/02/28 职场文书
汽车修理厂管理制度
2015/08/05 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
Python os和os.path模块详情
2022/04/02 Python