009 Python中的字典

一、什么是字典

1.是一种可变的容器,可以存储任意类型的数据

2.数据没有先后顺序关系,字典存储是无序的,所以没有+-*/的运算

3.每个数据都是用“键“(key)进行索引

而不像序列可以用下标来进行索引

4.以“键值对”的形式进行映射存储

5.键不能重复,否则可能会丢失,且只能用不可变类型[W用2] 作为字典的键

  值可以是任何类型

字典的字面值表示方式

用花括号{ }括起来,用冒号:分隔键-值对,用逗号,将各键值对分隔开

创建空字典

d = { }

创建非空字典

d = {‘name’:‘tarena’,‘age’:15 }

错误示例

d = {‘a’:1,‘b’:2,‘a’:‘-’}

 

二、字典的创建函数

Dict()

创建空字典,等同于{}

Dict(iterable

用可迭代对象初始化一个字典

Dict(**kwargs

关键字传参形式生成一个字典

示例

 

D = dict()

D = dict([(‘name’,‘terena’),(‘age’,15)])

D = dict(name=‘tarena’,age=15)

 

 

关键字传参

L= [(‘name’,‘terena’),(‘age’,15)]

Dict(L)

 

>>>(‘name’,‘terena’),(‘age’,15)

Dict(name=[1,2,3,4],1=[5,6,7,8])

>>>报错,表达式中的变量名不能以数字来取

Dict(name:[1,2,3,4],1:[5,6,7,8])

>>>可以

 

三、字典的基本操作

键索引

用[ ]运算符可以获取和修改键所对应的值

语法

字典[ 键 ]

 

3.1添加/修改字典的元素

语法

字典[ 键 ] = 值

说明

1.当键不存在时,创建键并绑定键对应的值

2.当键存在时,修改键绑定的对象

示例

D = {‘name’:‘tarena’,‘age’:15}

Print(‘姓名:’d[‘name’],‘年龄:’,d[‘age’])

>>>姓名:tarena 年龄:15

3.2删除字典的元素

语法

del 字典[ 键 ]

示例

 

d = { 1:“星期一”,2:“星期二” }

del d[ 2 ]

 

 

四、In 运算符

Also called 成员资格判断运算符

判断一个是否存在于字典中。存在,返回True;否则,返回False

示例

 

D = {1:“one”,2:“two”,“三”:“three”}

1 in D

‘二’in D

3 not in D

‘one’ in D

 

>>>True

>>>False

>>>True

>>>False

 

五、字典的迭代访问

1.字典是可迭代对象,只能对进行访问

 

示例

 

D = {1:“one”,2:“two”,“三”:“three”}

for k in d:

    print(k,‘对应的值是:’,d[ k ])

 

 

>>>k为D里的键;d[ k ]为D里的值

 

六、内建(built-in)函数

Len(x)

返回键值对的个数

Max(x)

返回键的最大值

Min(x)

返回键的最小值

Sum(x)

返回键的和

Any(x)

的真值测试,一真即真

All(x)

的真值测试,一佳即假

 

示例

 

D = {1:“one”,2:“two”,“三”:“three”}

Max(D)

>>>报错,可以比1和2的大小,比不了‘三’的值

 

七、字典的方法

见文档

示例1

D = {1:“one”,2:“two”,3:“three”}

for k,v in d.items() :

      print(“字典的键是:”,k,‘值是: ’,v)

>>> 

字典的键是:1 值是:one

….

示例2

for t in d.items():

      print( t )

>>> 

(1:“one”)

注:t返回的是以元组形式呈现的键值对。

 

八、字典的推导式

用可迭代对象依次生成字典的表达式

语法

{键表达式:值表达式  for  变量 in 可迭代对象 [ if 真值表达式 ]}

注:[]及其中的内容代表可略

说明

1.先从可迭代对象中取值

2.用变量绑定

3.用if进行条件判断,如果为真,则执行下一步

4.执行‘键表达式’和‘值表达式’,然后加入到新字典中

5.可嵌套,语法同列表推导式

示例

生成一个字典,键为1~9,值为键的平方

 

d = { x:x ** 2 for x in range(1,10)}

 

九、字典 VS 列表

都是可变对象

字典查找速度可能快于列表

列表用整数索引,

字典用键索引

列表存储有序,

字典存储无序

列表in查找:一个一个比对

字典in查找:

列表和字典的内部存储原理

顺序存储,每个元素都是挨着存储的。

映射存储,哈希存储,所以它是无序的、散列的

通过index查找:直接找到相应index就可以

 

通过in查找:要一个一个比对相应的值,

通过in查找:通过键直接在内存找到键对应的地址,取出键对应的值

尾插、中间插,都很慢

删改查都快

 

 

 [W用2]可变的有list, dict

 [W用3]del可删除变量、列表的元素、字典的键


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页