[PY3]——内置数据结构(7)——字典及其常用操作
字典及其常用操作Xmind图

关于字典
字典是一种key-value结构
字典是无序的
字典的定义
# {}大括号可以直接定义一个空字典
In [1]: d={};type(d)
Out[1]: dict
# {key:value}
In [2]: d={'a':1,'b':2};print(d)
{'a': 1, 'b': 2}
# dict([(key,value)]) 可迭代对象的元素必须是一个二元组,二元组的第0个元素为key,第1个元素的为value
In [6]: d=dict( [ ('a',1),('b',2) ] );print(d)
{'a': 1, 'b': 2}
# dict.fromkeys(可迭代对象,value) 传入的可迭代对象作为key,value缺省时默认为None
In [8]: d=dict.fromkeys(range(5));print(d)
{0: None, 1: None, 2: None, 3: None, 4: None}
In [9]: d=dict.fromkeys(range(5),'aa');print(d)
{0: 'aa', 1: 'aa', 2: 'aa', 3: 'aa', 4: 'aa'}
字典的增加与修改操作
In [10]: d
Out[10]: {0: 'aa', 1: 'aa', 2: 'aa', 3: 'aa', 4: 'aa'} # 可以直接使用key作为下标来操作,下标存在时为修改、不存在时为增加
In [11]: d['5']='bb';print(d)
{0: 'aa', 1: 'aa', 2: 'aa', 3: 'aa', 4: 'aa', '5': 'bb'} # update() 当中的可以是一个字典,所以通常用于合并两个字典
In [15]: d.update([('6','cc')]);print(d)
{0: 'aa', 1: 'aa', 2: 'aa', 3: 'aa', 4: 'aa', '5': 'bb', '6': 'cc'} In [17]: d.update({'7':'ee'});print(d)
{0: 'aa', 1: 'aa', 2: 'aa', 3: 'aa', 4: 'aa', 'e': 'e', '5': 'bb', '6': 'cc', '7': 'ee'}
字典的删除操作
1. pop(key,返回值)
In [21]: d
Out[21]: {0: 'aa', 1: 'bb', 2: 'aa', 3: 'aa', 4: 'aa'} # pop(key)从字典删除一个key,返回该key对应的value
In [22]: d.pop(4)
Out[22]: 'aa'
In [23]: d
Out[23]: {0: 'aa', 1: 'bb', 2: 'aa', 3: 'aa'} # 删除不存在的key,抛出KeyError
In [24]: d.pop(4)
KeyError: 4 # 删除不存在的key并指定默认值时,不会抛出KeyError并返回默认值
In [25]: d.pop(4,'default');print(d)
{0: 'aa', 1: 'bb', 2: 'aa', 3: 'aa'}
2. popitem() 随机删除一对,对空字典popitem()抛出KeyError
In [26]: d
Out[26]: {0: 'aa', 1: 'bb', 2: 'aa', 3: 'aa'} In [27]: d.popitem()
Out[27]: (0, 'aa') In [28]: d.popitem()
Out[28]: (1, 'bb')
3. clear() 清空一个字典
4. del语句(通常不会使用del来删除)
In [29]: d
Out[29]: {2: 'aa', 3: 'aa'} In [30]: del d[3];print(d)
{2: 'aa'}
字典的访问
In [1]: d={'d':2,'p':0,'r':2}
# 可通过key来访问其对应的value
In [2]: d['d']
Out[2]: 2
In [3]: d['a']
KeyError: 'a'
# get(key,返回值) 返回值不指定时默认为None
In [4]: d.get('d')
Out[4]: 2
In [5]: d.get('a')
In [6]: d.get('a','default')
Out[6]: 'default'
字典的遍历
# for循环直接遍历dict,可遍历到字典的key
In [8]: for i in d:
...: print(i)
p
d
r # dict.keys()返回一个可迭代对象,元素是字典的所有key
In [17]: d.keys()
Out[17]: dict_keys(['p', 'd', 'r']) In [18]: for i in d.keys():
...: print(i)
p
d
r # dict.values()返回一个可迭代对象,元素是字典的所有value
In [12]: d.values()
Out[12]: dict_values([0, 2, 2]) In [13]: for i in d.values():
...: print(i)
0
2
2 # dict.items()返回一个可迭代对象,元素是字典的(key,value)
In [14]: d.items()
Out[14]: dict_items([('p', 0), ('d', 2), ('r', 2)]) In [15]: for i in d.items():
...: print(i)
('p', 0)
('d', 2)
('r', 2) # 可以利用遍历items来做解构
In [16]: for k,v in d.items():
...: print(k,v)
p 0
d 2
r 2 # PY3与PY2的不同在于:
PY3中keys、values、items返回的是类似生成器的可迭代对象,并不会复制一份内存;
PY2中keys、values、items返回的是一个列表,会复制一份内存。(当然啦可用iterkeys、itervalues、iteritems替代)
字典的限制
字典的key不能重复,且需要可Hash
默认字典
# default初始化的时候,需要传入一个函数,这个函数也叫工厂函数。
# 当我们使用下标访问一个key时,如果这个key不存在,defaultdict会自动调用初始化时传入的函数,生成一个对象作为这个key的value In [20]: from collections import defaultdict In [21]: d1={}
In [25]: d1[0]
KeyError: 0 In [23]: d2=defaultdict(list)
In [26]: d2[0]
Out[26]: [] In [24]: d3=defaultdict(tuple)
In [27]: d3[0]
Out[27]: ()
有序字典
In [30]: from collections import OrderedDict In [31]: d=OrderedDict() In [33]: d[0]=3;d[3]=1;d[6]=1 In [34]: d
Out[34]: OrderedDict([(0, 3), (3, 1), (6, 1)]) In [35]: for k,v in d.items():
...: print(k,v)
0 3
3 1
6 1
[PY3]——内置数据结构(7)——字典及其常用操作的更多相关文章
- [PY3]——内置数据结构(6)——集合及其常用操作
集合及其常用操作Xmind图 集合的定义 # set( ) # {0,1,2} //注意不能用空的大括号来定义集合 # set(可迭代对象) In [1]: s=set();type ...
- [PY3]——内置数据结构(1)——列表及其常用操作
列表及其常用操作_xmind图 about列表 列表是一个序列,用于顺序存储数据 列表分为两种:ArrayList(用数组实现).LinkedList(用链表实现) 定义与初始化 #l ...
- [PY3]——内置数据结构(3)——字符串及其常用操作
字符串及其常用操作xmind图 字符串的定义 1. 单引号/双引号 In [1]: s1='hello world' In [2]: s1="hello world" 2. 三对单 ...
- [PY3]——内置数据结构(2)——元组及其常用操作
定义和初始化 #tuple() 使用工厂函数tuple定义一个空元组 #() 使用圆括号定义一个空元组 #(1,2,3) 使用圆括号定义有初始值的元组 #tuple(可迭代对象) 把可迭代对象转换为一 ...
- Python内置数据结构之字典dict
1. 字典 字典是Python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下.键可能是数(整数索引).字符串或元组.字典(日常生活中的字典和Python字典)旨在让你能够轻松地找到特定的单 ...
- 【Redis源代码剖析】 - Redis内置数据结构之字典dict
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51018337 今天我们来讲讲Redis中的哈希表. 哈希表在C++中相应的是ma ...
- [PY3]——内置数据结构(5)——字符串编码
py2和py3中关于字符串的最大区别? python2中只有 unicode类型 而python3中有 string bytes两种类型 关于string和bytes的区分? 1.str是文本序列.b ...
- [PY3]——内置数据结构(9)——线性结构与切片/命名切片slice()
线性结构的总结 列表list 元组tuple 字符串str bytes bytearray的共同点: 都是顺序存储.顺序访问的: 都是可迭代对象: 都可以通过索引访问 线性结构的特征: 可迭代 ...
- [PY3]——内置数据结构(8)——解构与封装
### 解构的理解与用法 ### 解构是python很有特色的一个功能,被很多语言借鉴(例如ES6) # 元素按照顺序赋值给变量 In [31]: lst=list(range(5)) In [32] ...
随机推荐
- Angularjs 通过directive实现验证两次输入是否一致的功能
实现效果: 1> 当输入确认密码时验证: 2> 当输入密码时验证: 实现步骤: 1.页面代码: <input class="form-control" type= ...
- solr特点一:高亮(highlighting)
高亮的配置 参数详细说明: hl.fl: 用空格或逗号隔开的字段列表.要启用某个字段的highlight功能,就得保证该字段在schema中是stored.如果该参数未被给出,那么就会高亮默认字段 s ...
- 【cocos2d-x 手游研发----博彩大转盘】
博彩大转盘,转盘抽奖的小系统,这是一个很有意思的游戏模块,游戏中增加这样一些趣味的小模块,我会附上源码: 会增进玩家的粘性,每天都想来抽两把试试手气: 我做的这个是个矩形风格的转盘,不是那种圆形的转盘 ...
- collections模块—— Counter
ounter目的是用来跟踪值出现的次数.它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value.计数值可以是任意的Interger(包括0和负数).Counter类和 ...
- 【文文殿下】[51nod1469] 淋漓尽致子串
SAM的经典应用 一个状态的SIze==1绝对不合法. 一个状态在parent树上有一个Size>1的后继绝对不合法(前面可以再补字符) 一个状态可以转移到Size>1的节点绝对不合法,因 ...
- 【文文殿下】CF1029F Multicolored Markers
这道题考场上卡了文文相当长的时间,所以写个题解泄泄愤QAQ 题意:给你$a$块红瓷砖,$b$块白瓷砖,在一个无限大的地上拼装,要求整体是一个矩形,并且至少有一种颜色是一个矩形,求最小周长. 题解: 首 ...
- wpa2破解代码思路(教你写poc)
前言:此篇关于1.wpa2协议漏洞的产生原因:2.scapy这个数据包库的基础:3.最后讲解代码思路,让你们从伪代码可以直接写成代码展开介绍分享~ 本文作者:i春秋签约作家——kaikaix 1.大家 ...
- php防止网站被刷新
在实际应用中,总会遇到某些页面被恶意用户刷新.当你的系统在某些模块没有使用缓存的时候,频繁的刷新会导致数据库吃紧.下面附上一段代码,防止频繁的刷新造成的死机情况. 主要是从 session方面进行限制 ...
- HTML实例(四)
实例一:有序列表,无序列表,<dl>,<dt>,<dd>,div块级标签等,实现上面的效果. <!DOCTYPE html> <html lang ...
- 苹果的 Metal 工程
Basic Buffers 当向顶点着色器传递数据过多(大于 4096 字节)时, setVertexBytes:length:atIndex: 方法不允许使用,应该使用 setVertexBytes ...