Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ

  知识源于生活。Python也是如此。

  提到字典,我首先想到的是数学大师——高斯。

  为何想起他呢?这主要是因为高斯算法嘛。计算1+2+3+...+100,一般人都会从1一直加到100,而高斯却另辟蹊径,找到规律,从而发现“高斯算法”。高斯算法极大地提高运算效率。对于Python中的字典,它与高斯算法异曲同工,同样能提高键值对的查找效率。

  映射(mapping):通过名字来引用值的数据结构。

  字典是Python中唯一内建的映射类型。字典的键值对(Key-Values),键是不可变的,可以为字符串、数字(int、float......)、元组等等。

  字典中的键是唯一的,而值却可以相同。

  Python格式如下:

 phone = {'Jack':'','James':'','Paul':''} #大括号,且键值对之间用冒号(:)隔开

  注:对于上面的代码,可能有读者会疑问:为什么用字符串表示电话号码呢?

  主要是考虑以“0”开头的电话号码。定义电话号码时,以“0”开头会显示错误(Error)。因此,为了考虑周全,字典中电话号码应表示为数字字符串,而不是整数。

  

图1 电话号码错误示例

  1.创建字典和访问元素

  创建方式如下:

d = {'a':'','b':'','c':'99','c':''}
print(d)
d['a']
'97'

  注:字典中即使键相同,也只会输出其中一个(若Key相同,后面的值(Value)会把前面的覆盖掉)。

  2.添加元素

  字典没有insert()方法,但依然能够添加元素。

d = {'a':'','b':'','c':''}
d['d'] = ''
print(d)

  3.删除元素

  字典中删除元素,使用pop()方法。pop()方法用于获得对应于给定键的值,并将该键值对从字典中移除。

d ={‘a':'97','b':'98','c':'99'}
d.pop('b')
''
print(d)
{‘a':'97','c':'99'}

  注:除了pop()方法,还可以使用del方法

  4.修改元素

  字典中的元素如何修改呢?很简单,直接通过Key修改Value。

d ={‘a':'97','b':'98','c':'99'}
d['b'] = ''
print(d['b'])
''
print(d)
d ={‘a':'97','b':'200','c':'99'}

  5.查找元素

  字典中查找元素与修改元素类似,也是通过Key来查找字典中的Value。

d ={‘a':'97','b':'98','c':'99'}
d['b']
''
d['c']
''

  如果字典中没有该Key时,dict会报错。

  

图2 错误提示(KeyError)

  如何避免Key不存在的错误呢?

  1.通过k in d,判断Key是否在dict中: 

‘a’ in d
True
'f' in d
False

  2.get()方法用于更宽松的访问字典项的方法。如果Key不存在,使用get()没有任何异常,仅仅返回None值:

  

                    图3 get()方法示例

  注:通过d.get('f','120')并不能往字典d ={}中添加键-值对。

  6.字典基本操作总结

   ♦len(d):返回d中键-值对的数量;

   ♦d[k]:返回关联到键K上的值(Value);

   ♦d[k] = V:将值V关联到将K上;

   ♦del d[k]:删除键为K的项;

   ♦K in d:检查d中是否含有键K的元素;

   ♦键K类型:字符串、数字或元组,符合条件的不可变类型均可;

   ♦字典格式化字符串:%(Jack)s %(phone)。【其中Jack为键,而phone为dict{}】

  其实,元组不一定可以用于dict的键(Key)

d ={‘a':'97','b':'98','c':'99'}
d[(1,2,3,4,5,6)] = ''
print(d)
d ={‘a':'97','b':'98','c':'99',(1,2,3,4,5,6):'121'}
d[(1,2,[1,2,3])] = ''
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

  注:如果元组用于键,元组中不能含有可变内容list,否则编译错误。

  字典总结

  1.字典中元素必须以键值对的形式出现;

  2.字典中的键必须是不可变的,可以是字符串、数字以及元组,并且无法修改;

  3.Key是唯一的,不可重复,而Value可以重复;

  4.字典查找和插入元素极快,并不会随着Key增加而减慢;

  5.字典占用内存大,以空间换取时间;

  6.特别地,当tuple作为字典中的键(Key)时,tuple中不能包含list,否则编译错误。

Python数据结构之三——dict(字典)的更多相关文章

  1. Python - 基础数据类型 dict 字典

    字典简介 字典在 Python 里面是非常重要的数据类型,而且很常用 字典是以关键字(键)为索引,关键字(键)可以是任意不可变类型 字典由键和对应值成对组成,字典中所有的键值对放在 { } 中间,每一 ...

  2. python数据类型之dict(字典)

    dict字典 关注公众号"轻松学编程"了解更多. 1.概述 dict也是一种存储方式,类似于list和tuple,但是,字典采用键-值(key-value)的形式存储. 优点:具有 ...

  3. python基础(六)dict字典和文件操作open

    字典dict 使用key来标注value的数据类型,key和value是一一对应的.在字典中key是唯一的,所以字典也是无序的. #定义一个字典 dict = { 'name' : 'sylar', ...

  4. python基础数据类型--dict 字典

    字典 字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必 ...

  5. Python中的dict字典的用法

    Python中的字典特点: 速度快,内部使用二分查找的方式 可以用来存储大量的关系型数据 字典是无序的 字典的定义方式: dic = dict(name =”zhangsan”,  age = 19) ...

  6. python数据类型:dict(字典)

    一.字典的简单介绍 字典(dict)是python中唯一的一个映射类型.他是以{}括起来的键值对组成. 语法: {key1:value1,key2:value2......} 注意:key必须是不可变 ...

  7. python数据结构-如何让字典有序

    如何让字典有序 问题举例: 统计学生的成绩和名次,让其在字典中按排名顺序有序显示,具体格式如下 {'tom':(1, 99), 'lily':(2, 98), 'david':(3, 95)} 说明 ...

  8. python数据结构-如何根据字典中值的大小对字典项排序

    如何根据字典中值的大小对字典项排序 问题举例 某班英语成绩以字典形式存储,如何根据成绩高低,计算学生成绩排名 { “tom”:80, "lily":88, "marton ...

  9. python数据结构与算法——字典树

    class TrieTree(): def __init__(self): self.root = {} def addNode(self,str): # 树中每个结点(除根节点),包含到该结点的单词 ...

随机推荐

  1. ECharts插件的使用

    ECharts插件:官网下载echarts.js开发者可以选择源码.下载地址:http://echarts.baidu.com/download.html 下载之后,echarts.js放在js文件夹 ...

  2. es6语法部分浏览器支持引发的坑

    es2015部分浏览器支持踩的坑 自从es2015出现以来,以其更丰富的api和简介的语法,使得js功能越来越丰富写起来也更便捷.比较早先的时候,浏览器是完全不支持的,我们使用的时候,必须要使用bab ...

  3. myeclipse中git的使用

    1.右键项目,team-->commit,勾选修改了的文件,点击commit(将更新提交到本地仓库)2.右键项目,team-->pull,合并本地仓库和远程服务器仓库,pull后有一些文件 ...

  4. Web前端性能优化——如何提高页面加载速度

    前言:  在同样的网络环境下,两个同样能满足你的需求的网站,一个"Duang"的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒, ...

  5. ZendOptimizer怎么安装?Php网站打开显示乱码

    http://jingyan.baidu.com/article/4e5b3e1952a99291901e24cf.html 安装zendoptimizer软件 1 网上下载对应的zend版本,点击进 ...

  6. ecshop商城_

    一.Ecshop简介: ECShop是Comsenz公司推出的一款B2C独立网店系统,适合企业及个人快速构建个性化网上商店.系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序. ECSho ...

  7. label+input实现开关切换效果

    Document 主要使用label+input来实现改变left的值,下面是核心代码,意思就是选中的input的兄弟节点.box下的.switch-btn元素的left会变成0px(原来是-37px ...

  8. scrapy-redis功能简介

    connection:连接redis最基本文件 default:默认值设置文件 dupefiler_key 保存指纹 dupefilter:替换scrapy默认的url去重器 piklecompat: ...

  9. js_4_函数

    js的函数是怎么定义的? function 函数名(形参1,......) { 函数体: return 返回值 :                                 //  可以没有返回 ...

  10. 一步步使用BMC Atrium Orchestrator Vmware Infrastructure Event Monitor

    本教程将一步步演示怎么使用BMC Atrium Orchestrator (BAO) Vmware Infrastructure Event Monitor来监控VSphere Webservice的 ...