【Python】Dictionary字典类

Dict字典类型简介.

一提到存储和检索数据的数据类型,我们会想到C语言的数组,Python的List列表等等序列类型,它们都是通过<整数序号索引>来查找<被索引内容>。索引是按照一定的顺序来检索内容的体系,编程语言中使用的索引主要包括两种,第一种就是我们说的<整数序号索引>,List中使用的就是这样的索引,实际上Python中的序列类型(因为元素有排列顺序,所以叫做序列类型)都可以通过<整数序号索引>来访问元素值;第二种是字符索引,也叫单词索引,顾名思义它采用单词作为索引词,通过具体的索引词找到数据。举个例子,我们生活中的字典就是这样的索引体系,我们在英汉字典中查找"Dictionary"条目,得到的数据是"字典",那么<Dictionary,字典>就是一组索引与被索引内容的实例。在编程术语中,根据一个信息查找另一个信息的方式构成了键值对,它表示索引使用的键和对应的值构成的成对关系,即通过一个特定的键来访问相应的值。我们看List=[1,2,3,4]这样一个列表的定义,<0,1>就是一个键值对,我们上面提到的<Dictionary,字典>也是一个键值对。通过任意键信息查找一组数据中值信息的过程叫做映射,熟悉离散数学定义的人可能想到了,离散数学中也有着映射的概念:指两个元素的集合之间元素相互“对应”的关系。实际上字典类型正是从这一思想发展而来,我们首先来看看Python中的Dict字典类型到底是什么样子:
dict={'a':1,'b':2,'c':3}
print(dict)
print(type(dict))
在这里插入图片描述
字典类型的创建方法几乎和Set集合类型如出一辙,都使用了{ }的方式,唯一不同之处在于当中的元素形式是'a':1的形式,也就是Key:Value的形式。我们完全可以认为字典就是存放了键值对的集合,它具有集合的无序性、互异性。我们也可以使用dict()方法来创建字典:
List=[('a',999),('b',123),('c',852)]
dict1=dict(List)
print(dict1)
print(type(dict1))
dict2=dict(name='Esperanto.',age=23)
print(dict2)
print(type(dict2))
在这里插入图片描述
注意到List中的元素类型是元组,并且dict2在创建时,键信息的名称并没有使用引号,而且值信息是直接以=关联到键信息的。创建了一个字典之后,我们会对它有修改、添加、访问值信息的操作,而这些操作都是通过[ ]来实现的。
dict=dict(name="Esperanto.",age=20)
print(dict['name'])
dict['age']=30
dict['sex']='Male'
print(dict)
在这里插入图片描述
到这里,除了访问、修改、添加这些操作本身,我们需要注意,字典中的键信息是不允许重复的,而不同键对应的值是可以相同的。思考离散数学中对于映射的概念,不难理解这样的设定,对于A集合中给定的元素x,只能映射到B集合中的一个元素y上。y可以作为多个x i _i i的象,但x绝对不可以有多个象。
dict={'name':"123",'name':"abc","age":20,"score":20}
print(dict)
在这里插入图片描述
上述的代码中,我们故意将"name"键信息对应到两个值信息上,造成的结果就是后一个键值对覆盖掉了前一个,而age和score可以对应相同的值信息-20.
字典类型也会需要删除操作,我们有三种方法来进行删除操作:
List=[('a',999),('b',123),('c',852)]
dict1=dict(List)
print(dict.pop('a'))
del dict['b']
print(dict)
dict.clear()
print(dict)
del dict
在这里插入图片描述
上述代码展示了删除操作的三种方法。pop(key,value)方法在key信息存在于字典中时返回对应的value信息并且删除该键值对,否则返回调用pop()时给定的value值;del dict[key]方法可以直接删除dict中key所对应的键值对;clear()方法则是清空字典,留下一个空字典。介绍完了增删改查等基本的操作之后,我们再讨论字典类型的一些常用操作。

Dict字典类型常用操作.

1.计算字典长度.

通俗的讲,也就是返回字典中存在的键值对数量,Python中通过len()方法来实现这一点功能,实际上len()方法可以也返回Tuple、Set、List类型的元素数量(有的情境中也称作长度).
dict=dict(name="Esperanto",age=200,sex="Unkonwn")
print(len(dict))
在这里插入图片描述

2.获取字典中的所有Key、Value以及键值对.

获取这三种信息的方法分别为:

  1. keys()
  2. values()
  3. items()

dict=dict(name="Esperanto",age=200)
keys=dict.keys()
values=dict.values()
items=dict.items()
print(keys)
print(type(keys))
print(values)
print(type(values))
print(items)
print(type(items))
在这里插入图片描述
从程序的运行结果中我们发现,keys()、values()和items()方法返回的类型都不是我们遇到过的类型,实际上他们都是Python中的字典视图,它们都可以通过list()方法转换成列表类型以便处理。下面是Python官方文档对之做出的解释以及对视图对象的详细描述:
在这里插入图片描述
在这里插入图片描述
Python规定Dict类型中的键信息一定要是不可变类型,例如str、int、tuple等,而值信息可以是任意的数据类型。
list=[(1,'a'),(2,'b')]
dict1=dict(list)
dict2={('a','b'):('c','d'),(1,2):(3,4)}
dict3=dict(a=['a','a','a'],b=['b','b','b'])
print(dict1)
print(dict2)
print(dict3)
在这里插入图片描述
在dict()方法中无法像这样进行创建dict=dict(1=2,2=3),本意是想创建包含<1,2><2,3>这样键值对的字典,但会被解读成表达式从而给出错误信息。
在这里插入图片描述

3.get()方法.

和前面介绍字典删除中的pop(key,default)方法对应的,get(key,value)方法的功能描述如下:如果key存在于字典中则返回相应的值信息,否则返回get()方法中value参数指定的值。
dict=dict(name="Esperanto",age=200)
print(dict.get('name'))
print(dict.get('sex','Unkonwn'))
在这里插入图片描述

4.字典推导

List列表类型Set集合类型中我们都介绍过推导这一操作,它一定程度上牺牲了代码的可读性、友好性换取了简洁。字典的推导几乎和Set集合一模一样,因为字典本身就是一种特殊的集合,我们给出一段代码,大家注意看其中的区别。
dict1={x:x**2 for x in range(5)}
print(dict1)
sample={('China','Beijing'),('Russia','Moscow')}
dict2={capital:country for country,capital in sample}
print(dict2)
在这里插入图片描述
很明显的,dict类型在进行推导时,推导范式中的Expr 1 _1 1必须要写成Key:Value的形式。下面是推导范式的图示。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值