python课程第三周 内置数据结构——字典

字典,Python中的无序集合,key-value结构,通过键来访问对应的值,而不是依靠偏移或者索引来访问值。下面是字典的一些基本属性:

  • 字典的value可以是任意值,例如数字、字符串、列表、元组,甚至是字典本身
  • 字典的key必须是可hash的值
  • 字典的key是唯一的
  • 字典没有切片操作,只能通过key来访问value
  • 字典内的元素都是无序存储的
  • 可变长度、异构、任意嵌套
  • 对象引用表:采用最优化的散列算法来查找键,因此键搜索速度非常快,字典存储的是对象引用(而不是拷贝)。

字典的初始化:

d=dict() #空字典
d={}#空字典
d={‘a‘:‘b‘}#单个键值对的字典
d = dict.fromkeys([‘a‘, ‘b‘]) #会创建一个{‘a‘:None, ‘b‘:None}字典
d = dict(zip(keylist, valuelist)) #多个键值对的字典,keylist和valuelist必须是可迭代对象

字典的下标操作

d= {‘a‘:1,‘b‘:2}
>>>d[‘a‘]
1
>>>d[‘a‘]=123 #修改value=123
>>>d
{‘a‘:123, ‘b‘:2}
>>> d[‘c‘] = 345#key不存在时,会自动创建一个key-value键值对
>>> d
{‘c‘: 345, ‘b‘: 2, ‘a‘: 123}
>>> d[‘d‘]#当访问不存在的key时,会返回一个KeyError错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: ‘d‘

字典常用方法:

update() #可接受一个字典、一个二元组构成的可迭代对象、或关键字参数作为函数参数,然后把参数添加到调用方法的字典里面去。

通过key直接增加对应的键值对

setdefault(k,[d])   #给字典增加一个元素,如果k存在时,返回对应的值v,不存在时,增加k-d键值对并返回d。

示例如下:

通过update方法:

>>>d={‘a‘:1,‘b‘:2}
>>>d.update(c=3)  #给d增加一个键值对‘c‘:3
>>>d
{‘c‘: 3, ‘b‘: 2, ‘a‘: 1}
>>>d.update([(‘f‘,4),(‘g‘,5)]) #给d增加两个键值对,使用二元组构成的可迭代对象做参数的方式。
>>> d
{‘c‘: 3, ‘b‘: 2, ‘f‘: 4, ‘a‘: 1, ‘g‘: 5}
>>>d.update({‘e‘:5})   #给d增加一个键值对,使用字典做参数的方式
>>> d
{‘c‘: 3, ‘b‘: 2, ‘a‘: 1, ‘e‘: 5, ‘g‘: 5, ‘f‘: 4}

通过key来添加值

>>>d = {‘a‘:1, ‘b‘:2}
>>>d[‘c‘] = 3 #此时d就是{‘a‘:1, ‘b‘:2, ‘c‘:3}

通过setdefault函数

>>>d = {‘a‘:1, ‘b‘:2}
>>>d.setdefault(‘a‘, 2)# 返回‘a‘对应的值1
1
>>> d.setdefault(‘h‘,10)#在d中增加键值对 ‘h‘:10,并返回值10
10
>>> d
{‘c‘: 3, ‘b‘: 2, ‘a‘: 1, ‘e‘: 5, ‘g‘: 5, ‘h‘: 10, ‘f‘: 4}

pop(k,[d])   #根据给出的k,在字典中删除k,然后返回k对应的v,如果k不存在,返回给出的默认值d,如果没有给出默认值,返回KeyError

popitem()   #在字典中随机取一个键值对,然后作为一个元组返回,如果字典是空的,则返回一个KeyError

clear()   #删除字典里面的全部元素

del(d[key]) #del方法删除根据键删除对应的值,如果key不存在,则会报KeyError错误。

示例:

>>> d
{‘e‘: 234, ‘i‘: 555, ‘f‘: 3, ‘g‘: 333, ‘c‘: 3, ‘a‘: 123, ‘b‘: 2}   #d原来的值
>>> d.pop(‘e‘)    #删除‘e‘:234键值对,并返回234
234
>>> d.pop(‘j‘)   #删除不存在的键‘j‘,返回KeyError错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: ‘j‘
>>> d.pop(‘j‘,-1)   #删除不存在的键‘j‘,给出默认值-1,返回默认值
-1
>>> d.popitem()     #返回键值对
(‘i‘, 555)
>>>del(d[‘e‘]#不存在的键值对,报错。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: ‘e‘
>>>del(d[‘a‘])#删除‘a‘对应的值。
>>>d
{‘b‘: 2, ‘f‘: 3, ‘i‘: 555, ‘g‘: 333}

直接通过key来修改对应的值

update()  #根据给出的键来修改对应的值,键不存在则新增键值对

示例如下:

>>>d = {‘a‘:1, ‘b‘:2}
>>>d[‘a‘] = 3
>>>d
{‘b‘:2, ‘a‘:3}
>>>d.update(a=2)
>>>d
{‘b‘:2‘, ‘a‘:2}

通过key来访问对应的值

get(k,[d]) #通过k来访问对应值,对应值存在则返回对应值,不存在则返回默认值d,没有给出默认值则返回空。使用get方法来查找对应的值,可以有效避免值不存在时抛出KeyError错误。

示例如下:

>>>d={‘a‘:1, ‘b‘:2}
>>>d[‘a‘]
1
>>> d.get(‘b‘,3)
2
>>> d.get(‘c‘,3)
3
>>> d.get(‘c‘)

字典也是序列的一种,因此也可以应用序列的一些常用的方法,例如len(d)是字典内键值对的数量。

字典的遍历

keys()   #返回一个dict_keys可迭代对象,包含所有的key,因此可以通过这个方法来遍历字典

values()   #返回一个dict_values可迭代对象,包含所有的value

items()    #返回一个dict_items(key-value键值对)可迭代对象,通过for循环或其他迭代工具可以取出键值对组成的元组

fromkeys(iterable,value=None)  #用于给字典初始化,以iterable里的对象作为key,默认的value是None

示例如下:

>>>d = {‘a‘:1, ‘b‘:2}
>>> d
{‘b‘: 2, ‘a‘: 1}
>>> for key in d.keys(): #通过键来遍历字典
...     print(key, ‘=>‘, d[key])
...
b => 2
a => 1

在python2中,使用上面的方法遍历字典返回的是一个键列表、值列表或键值对列表,但在python3中,返回的是可迭代对象。减少了内存占用。

键的排序

使用list转换返回的可迭代对象,然后使用sorted方法排序,在使用for循环依次读取键值对。示例如下:

>>> for key in sorted(list(d.keys())):
...     print(key, ‘=>‘, d[key])
...
a => 1
b => 2

本节主要介绍了Python的内置类型之一的字典,字典作为一种无序集合,通过键值对的形式进行数据存储,搜索的速度较快,同时还支持任意嵌套,根据需要增长和缩短,非常具有灵活性,因此在Python的开发过程中应用非常广泛。因此,对字典的基本方法要反复练习,要求熟练掌握。

时间: 2024-10-25 04:36:22

python课程第三周 内置数据结构——字典的相关文章

python课程第二周 内置数据结构——列表和元组

5种内置数据结构:列表.元组.字典.集合.字符串.列表.字典.字符串三种被称为线性结构. 针对线性结构的操作有:切片.封包和解包.成员运算符.迭代. 针对数据结构的操作有解析式:解析式分为列表解析.生成器解析.集合解析和字典解析. 后面三种是Python3.x特有的. 基本框架如下: 一.列表:Python中最具灵活性的有序集合对象类型 列表可包含任何种类的对象:数字.字符串.字典.集合甚至其他列表,这个特性称为异构.还具有可变长度和任意嵌套的特性,属于可变长度序列. (1)列表的初始化,有两种

Python内置数据结构——列表list,元组tuple

内置数据结构分类: 数值型 int , float , complex , bool 序列对象 字符串 str 列表 list tuple(元组) 键值对 集合 set 字典 dict 数字型 int ,float , complex , bool都是class, 1,5.0 , 2+3j都是对象的实例 int : python3的int就是长整型,没有大小限制,受限于内存大小 float:有整数部分和小数部分组成,支持十进制和科学计数法表示,只有双精度型 complex:有实数和虚部组成,实部

Python内置数据结构

内置数据结构 可变 list 列表 byterray dict 字典 set 集合 不可变 tuple 元组 bytes 常量(int,str,bool 等) list 列表 (推荐使用索引)列表相当于一个排列整齐的队列,可以理解为在内存中是一片排列整齐的连续的空间,它是可索引,可变的,有序的,线性结构,可迭代.优点:通过索引(index)查找.替换元素 效率高 时间复杂度O(1).尾部追加(append)与 尾部移除(pop)元素快 效率高 时间复杂度O(1).缺点:从中间增加或移除元素会使列

Python内置数据结构操作VS sqlite3操作

1.摘要 在同一数据库中查询某值,内置数据结构的查询速度快还是数据库sqlite3的查询速度快?针对这一问题,通过构建一个包含2500个随机数的列表,并将其插入sqlite3数据库中,利用timeit模块,分别对内置数据结构list和sqlite3查询某一值在不在数据组中进行对比. 2.代码 >>> import numpy as np >>> import sqlite3 >>> test=np.random.randn(2500) >>

【Redis源代码剖析】 - Redis内置数据结构之压缩字典zipmap

原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51111230 今天为大家带来Redis中zipmap数据结构的分析,该结构定义在zipmap.h和zipmap.c文件里.我把zipmap称作"压缩字典"(不知道这样称呼正不对)是因为zipmap利用字符串实现了一个简单的hash_table结构,又通过固定的字节表示节省空间. zipmap和前面介绍的ziplist结构十分相似,我们能够对照地进行学习: Redis中

【Redis源码剖析】 - Redis内置数据结构值压缩字典zipmap

原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51111230 今天为大家带来Redis中zipmap数据结构的分析,该结构定义在zipmap.h和zipmap.c文件中.我把zipmap称作"压缩字典"(不知道这样称呼正不正确)是因为zipmap利用字符串实现了一个简单的hash_table结构,又通过固定的字节表示节省空间.zipmap和前面介绍的ziplist结构十分类似,我们可以对比地进行学习: Redis中

ORACLE AUTOMATIC STORAGE MANAGEMENT翻译-第十章ASM内置数据结构(1)

CHAPTER 10 ASM Persistent Data Structures 与传统文件系统和卷管理器一样,ASM存储元数据用来描述和跟踪磁盘组的内容.所有的元数据描述存储在上面的ASM磁盘组的组成和内容,这些元数据使得磁盘组实现了自描述.ASM磁盘组有两类元数据:物理元数据和虚拟元数据.物理元数据位于磁盘上.虚拟元数据存储在ASM文件中,因此与其他ASM文件一样这些元数据均匀分布在磁盘组的磁盘上.RDBMS无法打开ASM读取元数据目录也不能对ASM物理元数据的位置执行读写(I/O)操作.

ORACLE AUTOMATIC STORAGE MANAGEMENT翻译-第十章ASM内置数据结构(2)

Free SpaceTable(FST) FST指明了ATB中包含的空闲空间.当磁盘被选择分配时ASM会生成一个磁盘FST.这个允许ASM跳过被ATBs占用的空间.FST包含每个ATB的条目.每个条目描述了extents size的总数和空闲extents.FST的目的是优化分配操作.事实上FST位于AllocationTable中.FST位于每个AT的第二个block(block 1). PartnershipStatus Table(PST) PST跟踪磁盘组资格和磁盘间的配合关系.ASM生

ORACLE AUTOMATIC STORAGE MANAGEMENT翻译-第十章ASM内置数据结构(3)完

Disk Directory Disk Directory包含了磁盘组中所有的磁盘信息.Disk Directory信息比PST更为详细.磁盘组中的每一块盘都有一个条目以数字为索引.Disk Directory的文件号在每个磁盘组中都是2号(F2). Disk Directory中的字段如下: n  Disk name n  Failure group name n  Disk size n  Disk free space n  Disk creation time Disk Director