关于字典

Posted 明王不动心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于字典相关的知识,希望对你有一定的参考价值。

字典是python语言中唯一内建的映射类型。

一个字典对象是可变的,它是一个容器类型,能存储任意个数的python对象。

字典和序列的区别是存储方式和访问数据的方式不同。

字典的键和值之间是相关联的,而序列的索引可以是随机的。

序列类型用有序的数字键做索引将数据以数组的形式索引,一般索引和所存储的数据毫无关系。

映射类型通常被称作hash表,因为字典的对象就是hash类型的。

hash表中存储的每一条数据叫做“值,与它相关的键一起存储。

hash表的算法是获取键,对键执行一个叫做hash函数的操作,并根据计算的结果,选择在数据结构的某个地方来存储值。

任何一个值的存储的地址皆取决于它的键,因为这种随意性,hash表中的值是没有顺序的。

为什么键必须是hash值,因为hash值的不可变性,如果键发生变化,hash值将不能可靠的来存储数据。

 

1.创建字典和赋值:直接创建、dict()、fromkeys()

>>> info1 = {name:kebi,age:25}  #直接创建字典
>>> info1
{name: kebi, age: 25}

>>> info2 = dict([(name,maoxian),(age,24)])
>>> info2      #从元祖映射
{name: maoxian, age: 24}
>>> info6 = dict([[gailun,zhaoxin],[shangdan,daye]])
>>> info6         #从序列映射
{gailun: zhaoxin, shangdan: daye} 

>>> info2 = dict(name = xiaoliao,age = 23)
>>> info2
{name: xiaoliao, age: 23}

>>> info4 = {}.fromkeys((wuhan,xiaogan),None)
>>> info4    #fromkeys也可以创建,理论说不算,因为该函数必须事先存在一个空字典
{wuhan: None, xiaogan: None}    
>>> info5 = {}.fromkeys([anlu,yunmeng],Hubei)
>>> info5
{anlu: Hubei, yunmeng: Hubei}

2.赋值:直接赋值、setdefault()

>>> group = {Top:xinye,Mid:xiaoniao}
>>> group
{Top: xinye, Mid: xiaoniao}
>>> group[Jungle] = kebi
>>> group
{Top: xinye, Mid: xiaoniao, Jungle: kebi}


>>> group
{Top: xinye, Mid: xiaoniao, Jungle: kebi}
>>> group.setdefault(ADC,maoxian)
maoxian
>>> group
{Top: xinye, Mid: xiaoniao, Jungle: kebi, ADC: maoxian}

3.访问:通过键访问、get()

>>> group[ADC]      #直接访问
maoxian
>>> group.get(ADC)   #get不错,还不会报错
maoxian

>>> group.keys()     #查键
dict_keys([Top, Mid, Jungle, ADC])
>>> group.values()   #查值
dict_values([xinye, xiaoniao, kebi, maoxian])

4.删除元素或者字典:del、pop()、popitem()、clear()

{Top: xinye, Mid: xiaoniao, Jungle: kebi, ADC: maoxian}
>>> del group[ADC]    #删除指定键值对
>>> group
{Top: xinye, Mid: xiaoniao, Jungle: kebi}
>>> group.popitem()    #删除最后一个键值对,不能指定删谁
(Jungle, kebi)
>>> group
{Top: xinye, Mid: xiaoniao}
>>> group.pop(Top)    #必须指定要删的对象
xinye
>>> group
{Mid: xiaoniao}

>>> group
{Mid: xiaoniao, ADC: xinxin}
>>> group.clear()   #清空字典
>>> group
{}
>>> group
{ADC: xinxin, sup: None}

>>> del group   #彻底删除
>>> group
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name group is not defined

5.相关知识

>>> print("%(name)s is %(position)s" %info)   #字典作为被格式化的对象
kebi is Jungle
>>> print("%(position)s is %(name)s" %info)
Jungle is kebi     #需要指定键值

字典中的键有两条是必须要遵守的:

(1)不允许一个键对应多个值

(2)键必须是可hash的

>>> group = {Top:kebi,Top:huagu}
>>> group
{Top: huagu}

puthon并不会因为字典中的键存在冲突就产生错误。这样做是为了节省内存。

 

以上是关于关于字典的主要内容,如果未能解决你的问题,请参考以下文章

Python代码阅读(第19篇):合并多个字典

Python代码阅读(第26篇):将列表映射成字典

Python代码阅读(第40篇):通过两个列表生成字典

关于代码片段的时间复杂度

关于片段生命周期

关于js----------------分享前端开发常用代码片段