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.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容