您的“关注”和“点赞”,是信任,是认可,是支持,是动力…
如意见相佐,可留言。
本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。
文章目录
1 Python 映射数据类型概述
mapping
对象会将 hashable
值映射到任意对象。 映射属于可变对象。
目前仅有一种标准映射类型字典
。
Python 字典(dict)是一种无序的、可变的序列,元素以“键值对(key-value)”的形式存储。
字典的键“几乎”可以是任何值。
非 hashable
的值,即包含列表、字典或其他可变类型的值(此类对象基于值而非对象标识进行比较)不可用作键。
数字类型用作键时遵循数字比较的一般规则:如果两个数值相等 (例如 1
和 1.0
) 则两者可以被用来索引同一字典条目。 (注意:由于计算机对于浮点数存储的只是近似值,因此将其用作字典键是不明智的。)
字典中的键必须唯一,不支持同一个键出现多次,否则只会保留最后一个键值对。
2 Python 创建字典
2.1 使用 { } 创建字典
使用``{ }` 创建字典的语法格式如下所示:
dictname = {'key1': 'value1', 'key2': 'value2', ..., 'keyn': 'valuen'}
对以上格式说明,
dictname
: 表示字典变量名。keyn: valuen
: 表示各个元素的键值对。注意:同一字典中的各个键必须唯一,不能重复,否则只会保留最后一个键值对。- 字典中每个元素都包含两部分,分别是键(key)和值(value),因此在创建字典时,键和值之间使用冒号
:
分隔,相邻元素之间使用逗号,
分隔,所有元素放在大括号{ }
中。
举例如下所示:
# 压索的四个技能
dict_demo = {'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩', 'R': '狂风绝息斩'}
print(dict_demo)
运行结果:
{'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩', 'R': '狂风绝息斩'}
2.2 通过 fromkeys() 方法创建字典
dict 对象提供 fromkeys(list,value=None)
方法创建带有默认值的字典。
通常用于初始化字典(设置 value
的默认值)。
使用格式如下所示:
dictname = dict.fromkeys(list,value=None)
对以上格式说明,
dictname
:fromkeys() 方法的返回值(创建好的字典)会赋值给变量 dictname。list
:list 参数表示要创建的字典中所有键组成的列表。value
:value 参数表示要创建的字典的元素的值的默认值,所有元素的值都为这个默认值;如果不写,则为空值None
。
举例如下所示:
例一,
list1 = ['Q', 'W', 'E', 'R']
dict_demo = dict.fromkeys(list1) # 不写 value 参数,则为空值 `None`
print(dict_demo)
运行结果:
{'Q': None, 'W': None, 'E': None, 'R': None}
例二,
list1 = ['Q', 'W', 'E', 'R']
dict_demo = dict.fromkeys(list1, '斩钢闪') # value 参数表示要创建的字典的元素的值的默认值,所有元素的值都为这个默认值
print(dict_demo)
运行结果:
{'Q': '斩钢闪', 'W': '斩钢闪', 'E': '斩钢闪', 'R': '斩钢闪'}
2.3 通过 dict() 映射函数创建字典
举例如下所示:
# 字符串类型的 键 不能带引号,否则会报错
dict1 = dict(Q='斩钢闪', W='风之壁障', E='踏前斩', R="狂风绝息斩")
print('dict1 =', dict1)
# 向 dict() 函数传入列表或元组,而它们中的元素又各自是包含 2 个元素的列表或元组,其中第一个元素作为键,第二个元素作为值。
dict2 = dict([('Q', '斩钢闪'), ('W', '风之壁障'), ('E', '踏前斩'), ('R', '狂风绝息斩')])
print('dict2 =', dict2)
# 通过应用 dict() 函数和 zip() 函数,可将前两个列表转换为对应的字典。
keys = ['Q', 'W', 'E', 'R']
values = ['斩钢闪', '风之壁障', '踏前斩', '狂风绝息斩']
dict3 = dict(zip(keys, values))
print('dict3 =', dict3)
运行结果:
dict1 = {'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩', 'R': '狂风绝息斩'}
dict2 = {'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩', 'R': '狂风绝息斩'}
dict3 = {'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩', 'R': '狂风绝息斩'}
2.4 创建空的字典
举例如下所示:
dict_demo1 = {} # 直接使用 {} 创建空字典
dict_demo2 = dict() # 使用 dict() 内置函数创建空字典
print(type(dict_demo1))
print('dict_demo1 =', dict_demo1)
print(type(dict_demo2))
print('dict_demo2 =', dict_demo2)
运行结果:
<class 'dict'>
dict_demo1 = {}
<class 'dict'>
dict_demo2 = {}
3 Python 访问字典
3.1 通过键(key)来访问对应的值。
使用格式如下所示:
dictname[key]
对以上格式说明,
dictname
:表示被访问字典的变量名。key
:表示键名。注意:键必须是存在的,否则会抛出异常。
举例如下所示:
例一,
dict_demo = {'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩', 'R': '狂风绝息斩'}
print(dict_demo['R'])
运行结果:
狂风绝息斩
例二,
dict_demo = {'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩', 'R': '狂风绝息斩'}
print(dict_demo['B']) # 字典中不存在 'B' 键
运行结果:
Traceback (most recent call last):
File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 11, in <module>
print(dict_demo['B']) # 字典中不存在 'B' 键
KeyError: 'B'
3.2 通过 dict 对象提供的 get() 方法访问指定键对应的值
Python 更推荐使用 dict 对象
提供的 get()
方法来获取指定键对应的值。
使用格式如下所示:
dictname.get(key[,default])
对以上格式说明,
dictname
:被访问字典的变量名。key
:表示指定的键。当指定的键不存在时,get()
方法不会抛出异常。default
:用于指定要查询的键不存在时,返回的默认值;如果不手动指定,会返回None
。
举例如下所示:
dict_demo = {'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩', 'R': '狂风绝息斩'}
print(dict_demo.get('R'))
print(dict_demo.get('B', '该键不存在'))
运行结果:
狂风绝息斩
该键不存在
4 Python 删除字典
Python 自带垃圾回收功能,会自动销毁不用的字典,一般不需要通过 del
关键字来手动删除。
手动删除字典使用 del
关键字。
举例如下所示:
dict_demo = {'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩', 'R': '狂风绝息斩'}
print('删除前 dict_demo =', dict_demo)
del dict_demo # 删除字典操作
print('删除后 dict_demo =', dict_demo)
运行结果:
删除前 dict_demo = {'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩', 'R': '狂风绝息斩'}
Traceback (most recent call last):
File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 15, in <module>
print('删除后 dict_demo =', dict_demo)
NameError: name 'dict_demo' is not defined
5 对 Python 字典键值对的基本操作
5.1 向 Python 字典添加键值对
向 Python 字典添加键值对,直接给不存在的 key
赋值即可。
使用语法格式如下所示:
dictname[key] = value
对以上格式说明:
dictname
: 表示字典名称。key
: 表示新的键。value
: 表示新的值,只要是 Python 支持的数据类型都可以。
举例如下所示:
dict_demo = {'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩', 'R': '狂风绝息斩'}
print('添加前 dict_demo =', dict_demo)
dict_demo['B'] = '回城' # 为字典添加键值对操作
print('添加后 dict_demo =', dict_demo)
运行结果:
添加前 dict_demo = {'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩', 'R': '狂风绝息斩'}
添加后 dict_demo = {'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩', 'R': '狂风绝息斩', 'B': '回城'}
5.2 从 Python 字典删除键值对
删除字典中的键值对,使用 del
语句。
举例如下所示:
dict_demo = {'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩', 'R': '狂风绝息斩'}
print('添加前 dict_demo =', dict_demo)
del dict_demo['R'] # 删除字典键值对操作
print('添加后 dict_demo =', dict_demo)
运行结果:
添加前 dict_demo = {'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩', 'R': '狂风绝息斩'}
添加后 dict_demo = {'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩'}
5.3 为 Python 字典修改键值对
Python 字典中键(key)的名字不能被修改,我们只能修改值(value)。
字典中各元素的键必须是唯一的,因此,如果新添加元素的键与已存在元素的键相同,那么键所对应的值就会被新的值替换掉,以此达到修改元素值的目的。
举例如下所示:
dict_demo = {'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩', 'R': '狂风绝息斩'}
print('修改前 dict_demo =', dict_demo)
dict_demo['R'] = '压索大招' # 修改字典值
print('修改后 dict_demo =', dict_demo)
运行结果:
修改前 dict_demo = {'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩', 'R': '狂风绝息斩'}
修改后 dict_demo = {'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩', 'R': '压索大招'}
5.4 判断键值对是否存在
判断字典中是否存在指定键值对:
- 首先,判断字典中是否有对应的键;
- 然后,如果键存在,再通过访问字典的方法可以轻易的获取对应的值。
判断字典是否包含指定键值对的键,可以使用 in
或 not in
运算符(都是基于 key 来判断的)。
举例如下所示:
dict_demo = {'Q': '斩钢闪', 'W': '风之壁障', 'E': '踏前斩', 'R': '狂风绝息斩'}
print('R' in dict_demo) # 判断字典中是否存在键 'R'
print('R' not in dict_demo) # 判断字典中是否不存在键 'R'
运行结果:
True
False
6 Python 字典常用方法详解
请参见博文 《Python 字典常用方法详解》。