Python基础教程:字典
字典 = {'键1':'值1','键2':'值2','键3':'值3',...}
animal_dict = {'Cow':'Milk','Chicken':'egg'}
字典由键值对构成,这种键值对称为项。在字典(及其他映射类型中),键是唯一的,而值无需如此
——字典是Python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下
一、函数dict
>>> lst = [[1,2],[3,4]]
>>> dct = dict(lst)
>>> dct
{1: 2, 3: 4}
二、format_map
'字符串{键名}'.format_map(键名所在字典)
作用:字典中包含各种信息,只需在格式字符串中提取所需的信息即可
>>> '张三来自于{省份}{城市}'.format_map(dict_v['张三'])
'张三来自于浙江杭州'
>>> dict_v = {'张三':{'省份':'浙江','城市':'杭州'},'李四':{'省份':'浙江','城市':'嘉兴'},'王五':{'省份':'浙江','城市':'杭州'},'李六':{'省份':'江苏','城市':'南京'}}
>>> '张三来自于{省份}{城市}'.format_map(dict_v['张三'])
'张三来自于浙江杭州'
>>> '李四来自于{省份}{城市}'.format_map(dict_v['李四'])
'李四来自于浙江嘉兴'
三、字典方法
1、clear
字典.clear()
作用:删除所有字典项
>>> x = {}
>>> y = x #y和x指向同一字典
>>> x['key'] = 'value'
>>> y
{'key': 'value'}
>>> x
{'key': 'value'}
>>> x = {} #x指向另一个字典
>>> x
{} #x是新字典的值
>>> y
{'key': 'value'} #所以y还是原来字典的值
>>> x = {}
>>> y = x #y和x指向同一字典
>>> x['key'] = 'value'
>>> y
{'key': 'value'}
>>> x.clear() #y和x共同指向的字典清空
>>> y
{}
2、copy/deepcopy,浅复制/深复制
字典.copy()
from copy import deepcopy deepcopy(字典)
要理解浅复制和深复制的区别,首先要了解python存储数据的方式。变量 = 值1,是把变量指向了值1(内存地址1),假使重新给变量赋值为值2(内存地址2) ,那么变量和值1的映射关系没有了,替换为变量指向值2。
>>> from copy import deepcopy
>>> dict_orign = {'key':{'1':'1','2':'2'}}
>>> copy1 = dict_orign.copy()
>>> copy2 = deepcopy(dict_orign)
>>> id(dict_orign)
2442900992712 #原件在内存中的地址
>>> id(copy1)
2442900738280 #浅复制副本1在内存中的地址
>>> id(copy2)
2442900992392 #深复制副本2在内存中的地址
>>> id(dict_orign['key'])
2442900975032 #原件字典项中值在内存中的地址
>>> id(copy1['key'])
2442900975032 #浅复制副本1字典项中值在内存中的地址
>>> id(copy2['key'])
2442900992552 #深复制副本2字典项中值在内存中的地址
↑↑↑见上述,原件和浅复制副本字典项-值在内存中的地址是一样的,而深复制完全不同,所以深复制后续的操作与原件不相关
>>> M = {'1':['1','2','3']}
>>> m1 = M.copy()
>>> id(M['1'])
2442869287688
>>> id(m1['1'])
2442869287688 #浅复制时,副本和原件值指向的内存地址都是2442869287688
>>> m1['1'].remove('3') #在既有内存地址上修改
>>> M
{'1': ['1', '2']} #原件也跟着副本的修改而变动了
>>> id(M['1'])
2442869287688
>>> id(m1['1'])
2442869287688 #值指向的内存地址还是原先的2442869287688
>>> m1['1'] = ['1','1','1'] #副本值重新赋值,也就是指向了新的内存地址
>>> M
{'1': ['1', '2']} #因为副本和原件值指向的内存地址不同,所以副本的变更不影响原件
>>> id(M['1'])
2442869287688
>>> id(m1['1'])
2442900925064 #副本内存地址已变更
3、fromkeys
{}.fromkeys([键名列表],值),值为选填项,不填则每个键对应的值都是None,填则每个键对应的值都是设置值
dict.fromkeys([键名列表],值),值为选填项,不填则每个键对应的值都是None,填则每个键对应的值都是设置值
作用:创建一个新字典,其中包含指定的键,且每个键对应的值都是None
>>> {}.fromkeys(['name', 'age'])
{'age': None, 'name': None}
>>> dict.fromkeys(['name', 'age'])
{'age': None, 'name': None}
>>> dict.fromkeys(['name', 'age'], '(unknown)')
{'age': '(unknown)', 'name': '(unknown)'}
4、get
字典.get(键,值),值为选填项,不填则若无此项返回None,填则若无此项返回设定值
作用:访问字典中的项,如果存在,则与普通字典查找一致;如果不存在则返回None,也可将None替换为其他值。
>>> d = {}
>>> print(d['name'])
Traceback (most recent call last):
File "<stdin>", line 1, in ?
KeyError: 'name'
>>> print(d.get('name'))
None
>>> d.get('name', 'N/A')
'N/A'
5、items
字典.items()
作用:(1)返回一个包含所有字典项的列表,其中每个元素都为(key,value)形式
(2)字典项在列表中无序排序
(3)items非副本,如果字典发生变化,items也会响应改变
>>> d = {'title': 'Python Web Site', 'url': 'http://www.python.org', 'spam': 0}
>>> d.items()
dict_items([('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')])
返回值属于一种名为字典视图的特殊类型。字典视图可用于迭代(迭代将在第5章详细介绍)。
另外,你还可确定其长度以及对其执行成员资格检查。
>>> it = d.items()
>>> len(it)
3
>>> ('spam', 0) in it
True
视图的一个优点是不复制,它们始终是底层字典的反映,即便你修改了底层字典亦如此。
>>> d['spam'] = 1
>>> ('spam', 0) in it
False
>>> d['spam'] = 0
>>> ('spam', 0) in it
True
6、keys
方法keys返回一个字典视图,其中包含指定字典中的键。
7、pop方法
字典.pop(键名)
作用:pop可用于获取与指定键相关联的值,并将该键值对从字典中删除。
>>> d = {'x': 1, 'y': 2}
>>> d.pop('x')
1
>>> d
{'y': 2}
8、popitem
字典.popitem()
作用:随机弹出键值对,可用于逐个处理字典项场景,这样无需提供键名
>>> 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(键,值),值为选填项,不填则若无此项值为None,字典新增此键值对;填则若无此项值为设定值,字典新增此键值对
作用:类似于get,但键不存在时,会在字典中添加指定键值对
>>> d = {}
>>> d.setdefault('name', 'N/A')
'N/A'
>>> d
{'name': 'N/A'}
>>> d['name'] = 'Gumby'
>>> d.setdefault('name', 'N/A')
'Gumby'
>>> d
{'name': 'Gumby'}
>>> d = {}
>>> print(d.setdefault('name'))
None
>>> d
{'name': None}
10、update
字典1.update(字典2)
作用:使用字典2中的项来更新字典1,若存在相同项,则用字典2的值替换字典1的值
>>> d = {
... 'title': 'Python Web Site',
... 'url': 'http://www.python.org',
... 'changed': 'Mar 14 22:09:15 MET 2016'
... }
>>> x = {'title': 'Python Language Website'}
>>> d.update(x)
>>> d
{'url': 'http://www.python.org', 'changed':
'Mar 14 22:09:15 MET 2016', 'title': 'Python Language Website'}
11、values
字典.values()
作用:返回值组成的字典视图,keys因为键特性,不会重复,values返回的可能包含重复值
>>> d = {}
>>> d[1] = 1
>>> d[2] = 2
>>> d[3] = 3
>>> d[4] = 1
>>> d.values()
dict_values([1, 2, 3, 1])
Python基础教程:字典的更多相关文章
- 《python基础教程(第二版)》学习笔记 字典(第4章)
<python基础教程(第二版)>学习笔记 字典(第4章)创建字典:d={'key1':'value1','key2':'value2'}lst=[('key1','value1'),(' ...
- Python基础教程2上的一处打印缺陷导致的代码不完整#1
#1对代码的完善的 出现打印代码处缺陷截图: 图片上可以看到,定义的request根本没有定义它就有了.这个是未定义的,会报错的,这本书印刷问题,这个就是个坑,我也是才发现.花了点时间脱坑. 现在发完 ...
- python基础教程(第二版)
开始学习python,根据Python基础教程,把里面相关的基础章节写成对应的.py文件 下面是github上的链接 python基础第1章基础 python基础第2章序列和元组 python基础第3 ...
- 【Python】Python基础教程系列目录
Python是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 在现在的工作及开发当中,Python的使用越来越广泛,为了方便大家的学习,Linux大学 特推出了 <Python基 ...
- Python基础教程系列目录,最全的Python入门系列教程!
Python是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 在现在的工作及开发当中,Python的使用越来越广泛,为了方便大家的学习,Linux大学 特推出了 <Python基 ...
- 《python基础教程(第二版)》学习笔记 语句/循环/条件(第5章)
<python基础教程(第二版)>学习笔记 语句/循环/条件(第5章) print 'AB', 123 ==> AB 123 # 插入了一个空格print 'AB', 'CD' == ...
- Python基础教程总结(一)
引言: 一直都听说Python很强大,以前只是浏览了一些博客,发现有点像数学建模时使用的Matlab,就没有深入去了解了.如今Python使用的地方越来越多,最近又在学习机器学习方面的知识,因此想系统 ...
- 学习参考《Python基础教程(第3版)》中文PDF+英文PDF+源代码
python基础教程ed3: 基础知识 列表和元组 字符串 字典 流程控制 抽象(参数 作用域 递归) 异常 魔术方法/特性/迭代器 模块/标准库 文件 GUI DB 网络编程 测试 扩展python ...
- Python基础教程(第2版 修订版) pdf
Python基础教程(第2版 修订版) 目录 D11章快速改造:基础知识11.1安装Python11.1.1Windows11.1.2Linux和UNIX31.1.3苹果机(Macintosh)41. ...
- Python基础教程-02
<Python基础教程> 第3章 使用字符串 字符串方法find返回的并非布尔值.如果find像这样返回0,就意味着它在索引0处找到 了指定的子串 join可合并一个字符串列表,不能合并数 ...
随机推荐
- 暑假学习四 8.26 Hadoop的简单使用
先说今日情况,本来打算返校结果回不去,然后身体差发烧了,就随便学了一些东西,阑尾炎还是好疼. 有一说一,我觉得我的电脑真的有点拉啊,三台虚拟机开启之后,运存直接90%,呜呜响,和我本人情况一样,麻了 ...
- Nginx 配置https的单向或双向认证
一.自制https认证证书 1. 制作CA证书 A. 生成CA私钥:openssl genrsa -des3 -out ca.key 2048,注意要输入两次密码,若去除密码使用openssl rsa ...
- iOS开发之实现自定义浮动操作框效果
今天有个需求是如上图实现类似微信的自定义浮动操作框效果 我自己就写了个demo,大家感兴趣的可以试试,下面是代码 VC代码如下 #import "TestCustomMenuItemVC.h ...
- 实验:STM32F103烧写支持Arduino
1.搭建烧写环境 烧写器:ST-LINK. 2.启动stm32 flash烧写工具 3.连接识别CPU 4.打开generic-boot20_pc13.bin 5.烧写程序 6.查上miniUS ...
- 一种基于Modbus的工业通信网关设计
近年来,随着工业自动化领域的发展,工业现场对网络的可靠性及成本有极高的要求.传统基于串口的工业网关可以满足工业现场的应用,但却要付出高额成本.一种基于 ModBus 设计的工业通信网关就走进人们的眼中 ...
- go 单测
1.在需要测试的go文件同级目录下创建${需要测试的文件名}_test.go文件 2. err, info :函数的返回值 "account-base-dd",1:传进去的参数 f ...
- (论文笔记)Learning Deep Structured Semantic Models for Web Search using Clickthrough Data
利用点击数据学习web搜索的深度学习模型 [总结] 该模型可以得到query和item的低维度向量表示,也可以得到二者的余弦语义相似度. 学习过程是通过最大化后验概率的极大似然估计得到的参数. ...
- JS实现中英文混合文字友好截取功能
众所周知,一个汉字等于两个英文字母的长度.那么,从汉字或者英文字母中截取相同长度文字则显示的长度则不一样.此时用户体验会不好.那么怎么解决呢?往下看 <script> /** * JS实现 ...
- MYSQL面试题大汇总
1.数据库的三大范式是什么 1)列不可再分 2)行可以唯一区分 3)表的非主属性不可以依赖与其他表的非主属性,外键约束 2.数据库中的事务 1)什么是事务:多条sql语句,要么都成功,要么都失败 2) ...
- Linux系列---【yum安装已下载好的rpm包】
yum安装已下载好的rpm包 先进入已下载好的rpm包的目录,然后执行下面的命令 yum localinstall xxx.rpm