Python零基础入门学习06:容器数据类型:字典

:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性。

字典类型定义

字典(dict)是Python基础数据类型中仅有的一种标准映射类型。
所谓映射,是一种键(索引)和值(数据)的对应。映射可以参考数学函数y=f(x),键对应x,值对应y。一个键(x)只能对应一个值(y),而一个值(y)可以对应多个键(x)。

键值对:键是数据索引index的扩展。

字典是键值对的集合,每一对键值对之间是无序的。

字典采用大括号{}和dict()来创建,键值对之间用冒号:连接。

{<key1>:<value1>, <key2>:<value2>,...,<keyn>:<valuen>}
字典的创建和访问

创建字典的2种方法:

student = {}
student = dict()

在字典中,通过键获得值。

字典的键必须是不可变数据类型,如int/string/tuple,float也可以,但官方不推荐。因为float在计算机的存储和表示只是近似值,用它作键可能产生一些意外情况而会导致数据不安全。

创建字典时,如果相同键对应不同值,字典采用最后(最新)一个"键值对"。如下所示:

d = {'a': 1, 'b': 2, 'b': '3'}
print(d['b'])

<<<3

标签收纳盒

如果说列表和元组可以看作是数据收纳盒的话,字典则可以被视为标签收纳盒。类比元组和列表,字典的标签是键,就相当于它们的索引。

字典中保存的各个数据值key-value键值对。

使用.fromkeys()来进行批量添加操作,若没有指定值,则值默认为None。

student = dict.fromkeys(("name", "age"))

student
Out[15]: {'name': None, 'age': None}

字典的键(key)需是不可变类型的数据,如int/string/tuple,float也可以,但官方不推荐。

字典的操作

更新字典用.update()方法。

不同于列表,字典添加元素是没有append()方法的,若是要往字典里添加元素,可以使用d[k] = value,即定义新键值对的方法来修改或添加元素。

d1 = {1: 1, 2: 2}

d2 = {3: 3}

d1.update(d2)

d1
Out[19]: {1: 1, 2: 2, 3: 3}

d1.update(a='agc')

d1
Out[28]: {1: 1, 2: 2, 3: 3, 'a': 'agc'}

d1['b'] = 'kkkk'

d1
Out[30]: {1: 1, 2: 2, 3: 3, 'a': 'agc', 'b': 'kkkk'}

缩减字典的方法:

del操作——del d[key]将 d[key] 从 d 中移除。 如果映射中不存在 key 则会引发 KeyError。

pop操作——.pop(key[, default])。如果 key 存在于字典中则将其移除并返回其值,否则返回 default。 如果 default 未给出且 key 不存在于字典中,则会引发 KeyError。

.popitem()——从字典中移除并返回一个 (键, 值) 对。 键值对会按 LIFO 的顺序被返回(也就是每次都在字典的最尾端移除键值对)。popitem() 适用于对字典进行消耗性的迭代,这在集合算法中经常被使用。如果字典为空,调用 popitem() 将引发 KeyError。在 3.7 版更改: 现在会确保采用 LIFO 顺序。 在之前的版本中,popitem() 会返回一个任意的键/值对。

[28]: d1
Out[28]: {1: 1, 2: 2, 3: 3, 'a': 'agc'}

del d1[1]

d1.pop(2)  #删除键为2的键值对(数据项),并返回该数据项的值。
Out[30]: 2

d1
Out[31]: {3: 3, 'a': 'agc'}

d1.clear()  #一次性清空字典里所有的键值对,把字典变为空字典。

d1
Out[33]: {}
字典不再是无序的

长期以来,Python中的字典都是无序的,但Python 3.7之后,这种情况已有所改变。尽管对字典进行访问时依然要使用键来操作,但如果要对字典进行添加或移除其中元素的操作,那么添加和移除的元素在字典中的排序不再是随机的,而是根据LIFO(即后进先出)的原则:无论是新增元素还是移除元素,都会发生在字典的尾部,而不是以前的随机位置。

#.popitem()的使用实例:按照LIFO后进先出的原则,从字典尾端开始移除数据项。
d = {"one": 1, 'jack': 4098, 'sjoerd': 4127, "two": 2, "three": 3}

d.popitem()
Out[43]: ('three', 3)

d.popitem()
Out[44]: ('two', 2)

d1
Out[28]: {1: 1, 2: 2, 3: 3, 'a': 'agc'}

d1['b'] = 'kkkk'  # 新增的元素会自动添加至字典的尾部。

d1
Out[30]: {1: 1, 2: 2, 3: 3, 'a': 'agc', 'b': 'kkkk'}

两个字典的比较当且仅当它们具有相同的 (键, 值) 对时才会相等(不考虑顺序)。 排序比较 ('<', '<=', '>=', '>') 会引发 TypeError。

To be continued.

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容