代码写的越急,程序跑得越慢。

—— Roy Carlson

目录

Python 字典是另一种非常实用的数据结构,在Python 中用dict 表示,是英文dictionary 的缩写。

>>> dict

Python 中的dict 在其它编程语言中一般用map 表示,虽然叫法不同,但基本原来是相通的。

1,Python 字典

Python 字典中的数据,以键值对(key:value)的形式存储,字典存储的是一个一一对应 的映射关系。

Python 中的字典类型,有如下特点:

字典中的键 是唯一的,不重复的

字典中的键 可以是任意一种不可变类型,比如字符串,数字,元组

字典中的值可以是任意一种数据类型

字典中的数据可以动态的删除/增加/修改

Python 会在需要的时候自动的扩容和缩容,方便开发者使用

2,声明字典

Python 中的字典使用大括号{} 表示,字典中的值以key:value 的形式存储,注意key,value 之间有个冒号:。

示例:

>>> d = {} # 一个空字典

字典中的键 可以是任意一种不可变类型,值可以是任意类型:

>>> d = {'name':'jack', 'age':18, 'flag':True}

提示:

虽然字典中的键可以是任意的不可变类型数据,但大部分情况下,我们只会使用字符串 类型

字典中的键不能是列表这样的可变类型的数据:

>>> l = [1, 2, 3]

>>> d = {l:'123'} # 出现异常

Traceback (most recent call last):

File "", line 1, in

TypeError: unhashable type: 'list'

3,字典元素个数

字典中元素的个数,就是字典中键的个数,可以用len() 查看:

>>> d = {'name':'jack', 'age':18, 'flag':True}

>>> len(d)

3

4,访问字典数据

使用索引访问某个元素

我们可以用变量名[键] 的格式来访问字典中的数据,在这里,键被称为索引。

>>> d = {'name':'jack', 'age':18, 'flag':True}

>>> d['name']

'jack'

>>> d['age']

18

>>> d['scores'] # 访问一个不存在的键,会抛异常

Traceback (most recent call last):

File "", line 1, in

KeyError: 'scores'

使用for 循环遍历字典

除了使用索引 访问字典,还可以使用for 循环遍历字典:

>>> d = {'name':'jack', 'age':18, 'flag':True}

>>> for key in d: # key 是 d 的键,d[key] 是对应的值

... print('key:%s value:%s' % (key, d[key]))

...

key:name value:jack

key:age value:18

key:flag value:True

上面的方式,是通过遍历字典中的键key,再通过索引的方式访问值d[key]。

5,修改字典

字典的修改操作包括添加元素,修改元素和删除元素。

添加和修改元素

使用索引和赋值语句可以向字典中添加和修改元素:

当给字典中一个已存在的键,再次赋值,就是修改元素

当给字典中一个不已存在的键,去赋值,就是添加元素

示例:

>>> d = {'a':1} # 初始化一个字典

>>> d['b'] = 2 # 给一个不存在的键去赋值,会添加元素

>>> d # 字典中多了键值对 'b':2

{'a': 1, 'b': 2}

>>> d['a'] = 3 # 给一个已存在的键去赋值,会修改这个键的值

>>> d # 键'a' 的值从原来的 1,变为了 3

{'a': 3, 'b': 2}

删除元素

使用索引和del 关键字可以删除字典中的键值对:

>>> d = {'a': 3, 'b': 2}

>>> del d['a']

>>> d

{'b': 2}

6,字典包含

可以使用 in 和not in运算符,查看一个键是否存在和不存在于一个字典中:

>>> d = {'a':1, 'b':2}

>>> 'a' in d

True

>>> 'a' not in d

False

7,字典函数

可通过dir(dict) 或 dir(字典对象) 来查看Python 字典支持的方法:

>>> dir(dict)

['__class__', '__contains__',

'__delattr__', '__delitem__',

'__dir__', '__doc__', '__eq__',

'__format__', '__ge__',

'__getattribute__', '__getitem__',

'__gt__', '__hash__', '__init__',

'__init_subclass__', '__iter__',

'__le__', '__len__', '__lt__',

'__ne__', '__new__', '__reduce__',

'__reduce_ex__', '__repr__',

'__setattr__', '__setitem__',

'__sizeof__', '__str__',

'__subclasshook__',

'clear', 'copy', 'fromkeys', 'get',

'items', 'keys', 'pop', 'popitem',

'setdefault', 'update', 'values']

这里我们依然只关注非魔法方法,共11 个。

1.get 方法

作用:获取字典D 中的键k 的值D[k]

原型:D.get(k[,d]) -> D[k]

参数 k:要获取的键

参数 d:当D 中不存在k 时,返回d,d 可省,默认为None

返回值:如果k 存在,返回D[k],否则返回 d

示例:

>>> d = {'a':1}

>>> d.get('a') # d['a'] 存在

1

>>> b = d.get('b') # d['b'] 不存在,返回 None

>>> print(b) # b 为 None

None

>>> b = d.get('b', 5) # d['b'] 不存在,返回 5

>>> print(b) # b 为 5

5

2.update 方法

作用:使用E 和 F 来更新字典D 中的元素

原型:D.update([E, ]**F) -> None

参数:E 为字典或者其它可迭代类型

返回值:总是返回None

示例:

>>> d1 = {'a':1, 'c':3}

>>> d2 = {'a':5, 'b':7}

>>> d1.update(d2) # 对于 d2 中的所有的键k,执行 d1[k] = d2[k]

>>> d1

{'a': 5, 'c': 3, 'b': 7}

>>> d1.update(a=8, d=6) # 也可以是这种形式的参数

>>> d1

{'a': 8, 'c': 3, 'b': 7, 'd': 6}

3.fromkeys 方法

作用:创建一个新的字典,该字典以序列iterable 中的元素作为键,每个键的值都是value

原型:dict.fromkeys(iterable, value=None, /)

参数 iterable:可以是任意的可迭代类型

参数 value:新字典中的每个键的值都是value,可省,默认为None

返回值:一个新的字典

示例:

>>> dict.fromkeys({'a':1, 'c':3}) # 参数是字典类型

{'a': None, 'c': None} # 一个新的字典,每个键的值都是 None

>>> dict.fromkeys({'a':1, 'c':3}, 5)

{'a': 5, 'c': 5} # 每个键的值都是 5

>>> dict.fromkeys(['a', 'b']) # 参数是列表类型

{'a': None, 'b': None}

4.items 方法

作用:将字典D 转换成一个可遍历的列表,列表中的元素由D 中的键值对组成

原型:D.items() -> dict_items

参数:无

返回值:一个dict_items 类型的可遍历的列表

示例:

>>> d = {'a':1, 'c':3}

>>> items = d.items()

>>> items # 将d 中的 key:vale 转成了 (key, value)

dict_items([('a', 1), ('c', 3)])

>>> type(items) # 类型为 dict_items

将dict_items 类型理解为一个可遍历的列表即可,列表中的元素是元组类型

该方法常用于遍历字典:

>>> d = {'a':1, 'c':3}

>>> for k, v in d.items():

... print(k, v)

...

a 1

c 3

5.keys 方法

作用:返回字典D 中所有的键

原型:D.keys() -> dict_keys

参数:无

返回值:一个dict_keys 类型的可遍历的列表

示例:

>>> d = {'a':1, 'c':3}

>>> keys = d.keys()

>>> keys # 提取了 d 中所有的键

dict_keys(['a', 'c'])

>>> type(keys)

将dict_keys 类型理解为一个可遍历的列表即可

6.values 方法

作用:返回字典D 中所有的值

原型:D.values() -> dict_values

参数:无

返回值:一个dict_values 类型的可遍历的列表

示例:

>>> d = {'a':1, 'c':3}

>>> vs = d.values()

>>> vs # 提取了 d 中所有的键

dict_values([1, 3])

>>> type(vs)

将dict_values 类型理解为一个可遍历的列表即可

7.pop 方法

作用:删除字典D 中的键k,并返回D[k]

原型:D.pop(k[,d]) -> v

参数 k:要删除的键

参数 d:若D[k] 存在,返回D[k],若D[k] 不存在,则返回d。参数d 可省

返回值:

D[k] 存在时,返回D[k]

D[k] 不存在,参数d 存在时,返回d

D[k] 不存在且参数d 不存在,抛出KeyError 异常

示例,当要pop 的键存在时:

>>> d = {'a': 1, 'c': 3}

>>> d.pop('c') # d['c'] 存在

3 # 返回 d['c']

>>> d # 键 'c' 被删除,只剩 'a'

{'a': 1}

示例,当要pop 的键存在时:

>>> d.pop('c') # 键 'c' 不存在,抛出异常

Traceback (most recent call last):

File "", line 1, in

KeyError: 'c'

>>>

>>> d.pop('c', 5) # 键'c' 不存在,但有第二个参数

5 # 返回第 2 个参数

8.popitem 方法

作用:删除并返回字典D 中的最后一个键值对,顺序是先进后出

原型:D.popitem() -> (k, v)

参数:无

返回值:一个元组类型,D 为空时,抛出异常

关于popitem 的顺序:

如果声明字典时,已有元素,按照从左到右的书写顺序,左为前,右为后

当动态向字典中增加元素时,先加入的为前,后加入的为后

示例,声明字典时,已有元素:

>>> d = {'c':3, 'a':1, 'b':2}

>>> d # 顺序为 c,a,b

{'c': 3, 'a': 1, 'b': 2}

>>> d.popitem() # pop 出 'b'

('b', 2)

>>> d # 还剩 c, a

{'c': 3, 'a': 1}

>>> d.popitem() # pop 出 'a'

('a', 1)

>>> d # 还剩 'c'

{'c': 3}

向字典中添加元素z和x:

>>> d['z'] = 6 # 增加 'z'

>>> d

{'c': 3, 'z': 6}

>>> d['x'] = 8 # 再增加 'x'

>>> d # 现在的顺序为 c,z,x

{'c': 3, 'z': 6, 'x': 8}

再次执行popitem:

>>> d.popitem() # pop 出 x

('x', 8)

>>> d # 还剩 c,z

{'c': 3, 'z': 6}

>>> d.popitem() # pop 出 z

('z', 6)

>>> d # 还剩 c

{'c': 3}

>>> d.popitem() # pop 出 c

('c', 3)

>>> d # 字典为空

{}

字典为空时,执行popitem,抛出异常:

>>> d.popitem() # 抛出异常

Traceback (most recent call last):

File "", line 1, in

KeyError: 'popitem(): dictionary is empty'

9.setdefault 方法

作用:设置字典D 中键k 的值

当D[k] 存在时:不做任何事情,只返回D[k]

当D[k] 不存在时:执行D[k] = d,并返回d

原型:D.setdefault(k[,d]) -> value

参数 k:要设置的键

参数 d:要设置的值,可省,默认为 None

返回值:返回D[k]

示例,当要设置的键存在时:

>>> d = {'a':1}

>>> d.setdefault('a') # d['a'] 存在,只返回d['a']

1

>>> d # d 不改变

{'a': 1}

>>> d.setdefault('a', 5) # d['a'] 存在,只返回d['a']

1

>>> d # d 不改变

{'a': 1}

当要设置的键不存在时:

>>> i = d.setdefault('b') # d['b'] 不存在,没有第 2 个参数

>>> d # 执行 d['b'] = None

{'a': 1, 'b': None} # 执行后的结果

>>> print(i) # 返回值为 None

None

>>> d.setdefault('x', 6) # d['x'] 不存在,有第 2 个参数,执行d['x'] = 6

6 # 返回 d['x']

>>> d # d 现在的值

{'a': 1, 'b': None, 'x': 6}

10.clear 方法

作用:清空字典D

原型:D.clear() -> None

参数:无

返回值:总是返回 None

示例:

>>> d = {'a': 1, 'b': None, 'x': 6}

>>> d.clear()

>>> d # d 为空

{}

11.copy 方法

作用:浅拷贝字典D

原型:D.copy() -> dict

参数:无

返回值:字典D 的副本

示例:

>>> d = {'a': 1, 'b': None, 'x': 6}

>>> d1 = d.copy()

>>> d1

{'a': 1, 'b': None, 'x': 6}

(完。)

推荐阅读:

python以字典初始化数据_Python 简明教程 ---12,Python 字典相关推荐

  1. python编写字符串查找函数_Python 简明教程 --- 8,Python 字符串函数

    好代码本身就是最好的文档.当你需要添加一个注释时,你应该考虑如何修改代码才能不需要注释. -- Steve McConnell 目录 字符串有很多操作函数,所以,这里我们专门用一节来介绍这些函数. 建 ...

  2. python高阶函数教学_Python 简明教程 --- 16,Python 高阶函数

    对于那些快速算法,我们总是可以拿一些速度差不多但是更容易理解的算法来替代它们. -- Douglas Jones 目录 高阶函数一般以函数为参数. 本节我们介绍Python 中三个方便的高阶函数,分别 ...

  3. python进阶路线知乎_Python学习教程(Python学习路线):第九天-面向对象进阶

    面向对象进阶 在前面的章节我们已经了解了面向对象的入门知识,知道了如何定义类,如何创建对象以及如何给对象发消息.为了能够更好的使用面向对象编程思想进行程序开发,我们还需要对Python中的面向对象编程 ...

  4. python中数组追加数据_python数组追加

    记linux shell的两个小技巧:shell数组和字符串判断 最近在使用shell写脚本的时候,想实现python中两个很简单的功能:1:判断一个字符串是否包含另一个字符串.2:怎么用实现pyth ...

  5. python 三引号_Python 简明教程 --- 4,Python 变量与基本数据类型

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 任何一个人都会写出能够让机器理解的代码,只有好的程序员才能写出人类可以理解的代码. -- Marti ...

  6. python多态_Python 简明教程 21,Python 继承与多态

    程序不是年轻的专利,但是,它属于年轻. 目录 目录 我们已经知道封装,继承和多态 是面向对象的三大特征,面向对象语言都会提供这些机制. 1,封装 在这一节介绍类的私有属性和方法的时候,我们已经讲到过封 ...

  7. python 正则表达式提取数据_Python爬虫教程-19-数据提取-正则表达式(re)

    本篇主页内容:match的基本使用,search的基本使用,findall,finditer的基本使用,匹配中文,贪婪与非贪婪模式 Python爬虫教程-19-数据提取-正则表达式(re) 正则表达式 ...

  8. python可以这样学读后感_Python基础教程的读后感10篇

    <Python基础教程>是一本由Magnus Lie Hetland著作,人民邮电出版社出版的平装图书,本书定价:69.00元,页数:471,文章吧小编精心整理的一些读者的读后感,希望对大 ...

  9. python sorted下标_Python学习教程(Python学习路线):第七天-字符串和常用数据结构

    Python学习教程(Python学习路线):字符串和常用数据结构 使用字符串 第二次世界大战促使了现代电子计算机的诞生,当初的想法很简单,就是用计算机来计算导弹的弹道,因此在计算机刚刚诞生的那个年代 ...

最新文章

  1. linux下IO口模拟I2C的一些总结
  2. Android Retrofit实现原理分析
  3. python头像变二维码_Python 图像处理库 pillow,提取支付宝和微信支付图片二维码...
  4. Java开发,月薪30k需要掌握哪些主流技术?
  5. KMP 中next 数组的性质
  6. 克制linux启动盘,制作Linux启动盘的四种方法
  7. 你在学校我安排了你没有做到最多凶你一顿,在公司不一样,直接得让走人!...
  8. Linux ss命令 报错,ECS Linux中ss命令显示连接状态的使用说明
  9. postman响应html,Postman工具——请求与响应(示例代码)
  10. c语言补全程序,跪求高手解答简单的程序补全题~!
  11. uni-app 引用地图
  12. 图像 - 灰度化、灰度反转、二值化
  13. 今日头条引流小白入门视频解析下载支持今日头条快手抖音视频去水印软件批量处理去重消重去水印去logo...
  14. 用USRP-LW N210搭建软件雷达系统
  15. 基于 OS X Mavericks 系统
  16. C++之学生成绩管理系统
  17. github船舰新文件夹,为什么github显示灰色文件夹,当我创建一个新的存储库?
  18. 驱动备份及还原命令-手记
  19. matlab连通区域质心标记,连通域的质心
  20. (九)统计学习方法 | 隐马尔可夫模型

热门文章

  1. SD卡数据丢失恢复软件免费下载
  2. mysql等待事件类型_【等待事件】User I/O类 等待事件(2.9)--local write wait
  3. vue-cli 打包出来的文件缺少_关于vue-cli打包或者上线后文件各种路径或者找不到的问题解决方案...
  4. 积分球原理及积分球类型介绍
  5. 重磅!你们一直催的 PyEcharts教程来啦
  6. 【PSD: Principled Synthetic-to-Real Dehazing Guided by Physical Priors】(个人笔记,勿喷)
  7. zookeeper 网关_zookeeper 有哪些应用场景?面试官希望听到这 4 点!
  8. 局域网管理方案:用的少,做的多
  9. unturned服务器配置文件,unturned服务器配置
  10. java常用命令javac、javap、jps、jstack