1. 什么是字典
1.1 字典定义
字典也是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据。
比如有份成绩表数据,语文:79,数学:80,英语:92,这组数据看上去像两个列表,但这两个列表的元素之间有一定的关联关系。如果单纯使用两个列表来保存这组数据,则无法记录两组数据之间的关联关系。
为了保存具有映射关系的数据,Python 提供了字典,字典相当于保存了两组数据,其中一组数据是关键数据,被称为 key;另一组数据可通过 key 来访问,被称为 value。形象地看,字典中** key 和 value 的关联**如下:
1.2 字典特点
-
dict(字典) 是 除列表以外Python之中 最灵活 的数据类型 -
字典同样可以用来 存储多个数据
- 通常用于存储 描述一个
物体的相关信息
- 通常用于存储 描述一个
-
和列表的区别
- 列表 是 有序 的对象集合
- 字典 是 无序 的对象集合
-
字典使用 键值对 存储数据,键值对之间使用
,分隔- 键
key是索引 - 值
value是数据 - 键 和 值 之间使用
:分隔 - 键必须是唯一的
- 值 可以取任何数据类型,但 键 只能使用 字符串、数字或 元组
- 键
2. 字典常用方法
2.1 创建字典
程序既可使用花括号语法来创建字典,也可使用 dict() 函数来创建字典。
d = {key1 : value1, key2 : value2}
d = dict()
dict1 = {} # 空字典定义
dict2 = {"name": "Tom", 'age': 18, 'height': 180}
dict3 = dict() # 空字典定义
print(type(dict1)) # <class 'dict'>
print(type(dict2)) # <class 'dict'>
print(type(dict3)) # <class 'dict'>
| 名称 | 唯一性 | 可存储数据类型 | 可变性 |
|---|---|---|---|
| key(键) | 唯一 | 数字、字符串、元组 | 不可变 |
| value(值) | 不唯一 | 任意 | 可变 |
2.2 访问数据
- 把相应的key放入熟悉的方括弧
[](key不存在则报错) dict2.get(key')(key不存在不会报错,返回None)dict2.get(key, returnValue), 当key不存在时返回指定值(returnValue)
dict2 = {"name": "Tom", 'age': 18, 'height': 180}
print(dict2['name']) # Tom
print(dict2['age']) # 18
dict2 = {"name": "Tom", 'age': 18, 'height': 180}
print(dict2.get('name')) # Tome
print(dict2.get('aaaa')) # None
错误访问:如果用字典里没有的键访问数据,会输出错误KeyError
dict2 = {"name": "Tom", 'age': 18, 'height': 180}
print(dict2['good'])
为避免错误,可以用in判断key是否在字典中
dict2 = {"name": "Tom", 'age': 18, 'height': 180}
if 'good' in dict2:
print(dict2['good'])
else:
print('key "good" 不在字典中')
2.3 更新数据
- 把相应的key放入方括弧
[],对value重新赋值- 如果 key 存在则更新,不存在则新增
dict2.setdefault(key, newValue)- 字典中已存在相对应的key时不会更新其键的值,只能用于增加键值对
dict1.update(dict2)把字典 dict2 的键/值对更新到 dict1 里- 有相同的键时:会使用最新的字典 dict2 中 该 key 对应的 value 值。
- 有新的键时:会直接把字典 dict2 中的 key、value 加入到 dict1 中。
dict2 = {"name": "Tom", 'age': 18, 'height': 180}
dict2['name'] = '熊大' # 更新数据
print(dict2['name']) # 熊大
2.4 删除数据
2.4.1 删除单个元素
del dict2[key]、dict2.pop(key) 都是指定键key,删除字典内的键值对。
del没有返回值,pop()返回当前删除键的值- key不在字典中时二者均报错
dict2.popitem() 则是随机删除字典内一个键值对,并返回删除的键值对(元组形式)。
dict2 = {"name": "Tom", 'age': 18, 'height': 180}
del dict2['age'] # 删除指定key
print(dict2) # {'name': 'Tom', 'height': 180}
dict2 = {"name": "Tom", 'age': 18, 'height': 180}
res = dict2.pop('age') # 删除指定key
print(res) # 18
print(dict2) # {'name': 'Tom', 'height': 180}
dict2 = {"name": "Tom", 'age': 18, 'height': 180}
res = dict2.popitem() # 随机删除键值对
print(res) # ('height', 180)
print(dict2) # {'name': 'Tom', 'age': 18}
2.4.2 清空字典数据
dict2.clear()
dict2 = {"name": "Tom", 'age': 18, 'height': 180}
dict2.clear()
print(dict2) # {}
2.4.3 删除字典
del dict2
dict2 = {"name": "Tom", 'age': 18, 'height': 180}
del dict2
2.5 增加数据
把新增的key放入方括弧[],语法和更新数据相同,因此字典中有这个key为更新,没有这个key则新增。
dict2 = {"name": "熊大", 'age': 18, 'height': 180}
dict2['gender'] = "boy" # 增加数据
print(dict2) # {'name': '熊大', 'age': 18, 'height': 180, 'gender': 'boy'}
2.6 其他函数和遍历
dict2.keys(), 返回所有key序列
dict2.values(), 返回所有value序列
dict2.items(),返回所有(key, value)元组序列
dict2 = {"name": "Tom", 'age': 18, 'height': 180}
print(dict2.keys()) # dict_keys(['name', 'age', 'height'])
print(dict2.values()) # dict_values(['Tom', 18, 180])
print(dict2.items()) # dict_items([('name', 'Tom'), ('age', 18), ('height', 180)])
注:dict_keys、dict_values、dict_items不是列表,是键的迭代形式,可通过list()将其转化为list
字典循环遍历:
for ... in ... 默认取字典中的 keys() 所有的键 ,然后再通过键获取值。
然而我们可以通过字典中的 items() 来一次遍历键和值
dict2 = {"name": "Tom", 'age': 18, 'height': 180}
for a in dict2:
print(a + ": " + str(dict2[a]))
'''
name: Tom
age: 18
height: 180
'''
dict2 = {"name": "Tom", 'age': 18, 'height': 180}
for a in dict2.keys():
print(a + ": " + str(dict2[a]))
'''
name: Tom
age: 18
height: 180
'''
dict2 = {"name": "Tom", 'age': 18, 'height': 180}
for a in dict2.values():
print(a)
'''
Tom
18
180
'''
dict2 = {"name": "Tom", 'age': 18, 'height': 180}
for k, v in dict2.items():
print(str(k) + ": " + str(v))
'''
name: Tom
age: 18
height: 180
'''