1. dict

我们已经知道,listtuple 可以用来表示顺序集合,例如,班里同学的名字:

['Adam', 'Lisa', 'Bart']

或者考试的成绩列表:

[95, 85, 59]

但是,要根据名字找到对应的成绩,用两个 list 表示就不方便。

如果把名字和分数关联起来,组成类似的查找表:

'Adam' ==> 95
'Lisa' ==> 85
'Bart' ==> 59

给定一个名字,就可以直接查到分数。

Python的 dict就是专门干这件事的。用 dict 表示“名字”-“成绩”的查找表如下:

d = {'Adam': 95,'Lisa': 85,'Bart': 59
}

我们把名字称为key,对应的成绩称为valuedict就是通过 key 来查找 value。

花括号{} 表示这是一个dict,然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。

由于dict也是集合,len()函数可以计算任意集合的大小:

>>>len(d)
3

注意:一个 key-value 算一个,因此,dict大小为3。

2. 访问dic

我们已经能创建一个dict,用于表示名字和成绩的对应关系:

d = {'Adam': 95,'Lisa': 85,'Bart': 59
}

那么,如何根据名字来查找对应的成绩呢?

可以简单地使用 d[key] 的形式来查找对应的 value,这和 list 很像,不同之处是,list 必须使用索引返回对应的元素,而dict使用key:

>>> print d['Adam']
95
>>> print d['Paul']
KeyError: 'Paul'

注意: 通过 key 访问 dict 的value,只要 key 存在,dict就返回对应的value。如果key不存在,会直接报错:KeyError。

避免 KeyError发生,有两个办法:

一是先判断一下 key是否存在,用 in 操作符:

if 'Paul' in d:print d['Paul']

如果 ‘Paul’ 不存在,if语句判断为False,自然不会执行 print d[‘Paul’] ,从而避免了错误。

二是使用dict本身提供的一个get 方法,在Key不存在的时候,返回None:

>>> print d.get('Bart')
59
>>> print d.get('Paul')
None

3. dict的特点

dict的第一个特点查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。

不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。

由于dict是按 key 查找,所以,在一个dict中,key不能重复。

dict的第二个特点就是存储的key-value序对是没有顺序的!这和list不一样:

d = {'Adam': 95,'Lisa': 85,'Bart': 59
}

当我们试图打印这个dict时:

>>> print d
{'Lisa': 85, 'Adam': 95, 'Bart': 59}

打印的顺序不一定是我们创建时的顺序,而且,不同的机器打印的顺序都可能不同,这说明dict内部是无序的,不能用dict存储有序的集合。

dict的第三个特点是作为key 的元素必须不可变,Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。但是list是可变的,就不能作为 key

可以试试用list作为key时会报什么样的错误。

不可变这个限制仅作用于key,value是否可变无所谓:

{'123': [1, 2, 3],  # key 是 str,value是list123: '123',  # key 是 int,value 是 str('a', 'b'): True  # key 是 tuple,并且tuple的每个元素都是不可变对象,value是 boolean
}

最常用的key还是字符串,因为用起来最方便

3. 更新dict

dict是可变的,也就是说,我们可以随时往dict中添加新的 key-value。比如已有dict:

d = {'Adam': 95,'Lisa': 85,'Bart': 59
}

要把新同学’Paul’的成绩 72 加进去,用赋值语句

d['Paul'] = 72

再看看dict的内容:

>>> print d
{'Lisa': 85, 'Paul': 72, 'Adam': 95, 'Bart': 59}

如果 key 已经存在,则赋值会用新的 value 替换掉原来的 value:

>>> d['Bart'] = 60
>>> print d
{'Lisa': 85, 'Paul': 72, 'Adam': 95, 'Bart': 60}

3. 遍历dict

由于dict也是一个集合,所以,遍历dict和遍历list类似,都可以通过for 循环实现。

直接使用for循环可以遍历 dict 的 key:

>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
>>> for key in d:print key
Lisa
Adam
Bart

由于通过 key 可以获取对应的 value,因此,在循环体内,可以获取到value的值d[key]

【廖雪峰python入门笔记】dict相关推荐

  1. 【廖雪峰python入门笔记】列表生成式

    1. 生成列表 要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11): >>> range(1, 11) [1, 2, ...

  2. 【廖雪峰python入门笔记】迭代

    1. 迭代 在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration). 在Python中,迭代是通过for ...

  3. 【廖雪峰python入门笔记】切片

    1. 对list进行切片 对list进行切片 取一个list的部分元素是非常常见的操作.比如,一个list如下: L = ['Adam', 'Lisa', 'Bart', 'Paul'] 取前3个元素 ...

  4. 【廖雪峰python入门笔记】函数

    1. 函数 我们知道圆的面积计算公式为: S = πr² 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需要计算3个不同大小的圆的面积: r1 = 12.34 r2 = 9.08 r3 = ...

  5. 【廖雪峰python入门笔记】set

    1. set dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的. 有的时候,我们只想要 dict 的 key,不关心 key 对应的 value,目的就是 ...

  6. 【廖雪峰python入门笔记】for循环

    list或tuple可以表示一个有序集合.如果我们想依次访问一个list中的每一个元素呢?比如 list: L = ['Adam', 'Lisa', 'Bart'] print(L[0]) print ...

  7. 【廖雪峰python入门笔记】if语句

    1. if语句及缩进规则 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,可以用if语句实现: age = 20 if ...

  8. 【廖雪峰python入门笔记】tuple_创建单元素

    tuple和list一样,可以包含 0 个.1个和任意多个元素. 包含多个元素的 tuple,前面我们已经创建过了. 包含 0 个元素的 tuple,也就是空tuple,直接用 ()表示: t = ( ...

  9. 【廖雪峰python入门笔记】list_按照索引访问

    1. 按照索引访问list Python按照索引访问list 由于list是一个有序集合,所以,我们可以用一个list按分数从高到低表示出班里的3个同学: L = ['Adam', 'Lisa', ' ...

最新文章

  1. 波士顿咨询:2018最具创新力企业50强
  2. 日子是过以后、不是过从前
  3. 【自动化__持续集成】___java___static
  4. MySQL 之Navicat Premium 12安装使用、pymysql模块使用、sql注入问题的产生与解决
  5. unity3d Android多渠道,Unity For Android多渠道SDK接入解决方案
  6. 选择要加载的插件有什么用_为什么/如何PPT形状圆角化,用好这个插件,画出更多神奇形状...
  7. 伽利略板子串口驱动安装问题
  8. printf 小代码 大问题
  9. 图片版坦克大战源代码之图片处理类(一)
  10. 骁龙845_性能强大价格更吸引 超值骁龙845手机盘点
  11. Ps调色磨皮降噪抠图胶片特效模拟常用100款滤镜合集一键安装支持PSCC2015-2019win64
  12. python: not found 问题的解决
  13. 软回车和硬回车 MS高级office
  14. Altium_Designer-原理图库如何添加低电平有效的管脚?
  15. 取消Word自动首字母大写步骤
  16. linux系统获取root权限,linux怎么进入root权限
  17. Linux下常用文件系统
  18. 语音合成学习(一)综述
  19. Webtoos 仿Q+云桌面框架
  20. Linux--firewalld防火墙基础(firewalld和iptables的关系,四表五链,netfilter与iptables的关系,iptables语法与参数,firewalld网络区域)

热门文章

  1. 题目 1471:【蓝桥杯】【入门题】【基础练习VIP】矩形面积交
  2. 技术图文:Matlab向量 VS. Python列表
  3. 【怎样写代码】偷窥高手 -- 反射技术(五):深入窥视方法
  4. 【建模必备】遗传算法的基本原理与步骤(编码/解码)
  5. 英特尔发布智慧社区解决方案,全栈技术支撑,涵盖五大战略方向
  6. 10个 Python 工程师,9个不合格!
  7. 华为昇腾师资培训沙龙·南京场 |华为昇腾 ACL 语言开发实践全程干货来了!看完就实操系列...
  8. 限免!百名AI大咖,20大技术和行业论坛,不可错过的开发者嘉年华
  9. 在Rust代码中编写Python是种怎样的体验?
  10. 美团十年,支撑最大规模外卖配送的一站式机器学习平台如何炼成?