Python 字典
1 什么是字典
字典是Python中唯一的映射类型,采用键值对(key-value)的形式存储数据
Python中对key进行哈希函数运算,根据结果来决定value的存储地址,所以字典是无序的,且key必须是可哈希的可哈希的意思是,key必须是不可变类型:如数字、字符串、元组
字典和列表是Python中最灵活的内置数据类型,两者的区别在于:列表是有序的对象集合、可以通过索引取值;字典是无序的对象集合,只能通过键(key)来取值
特别注意:Python 3.7引入了有序字典,使用时需要先导入 from collections import OrderedDict
2 字典的操作
2.1 创建字典
创建字典方法如下:
# 创建空字典
dict1 = {}
dict2 = dict()
print(dict1)
print(dict2)
# 直接赋值
dict3 = {'张无忌': 25, '赵敏': 24}
print(dict3)
# dict函数和参数传值
dict4 = dict(张无忌=25, 赵敏=24)
# 此方法以参数形式构建键值对,所以字符不用加引号'',Python生成字典时会自动补上,同时也不能用数字作为键,因为参数不能以数字开头
print(dict4)
# dict函数和可迭代对象
dict5 = dict(zip(['张无忌', '赵敏', '周芷若'], [25, 24, 25]))
dict6 = dict([('张无忌', 25), ('赵敏', 24), ('周芷若', 25)])
print(dict5)
print(dict6)
# 字典推导式,此方法严格来说就是直接赋值
dict7 = {i: i ** 2 for i in range(10) if i % 2 == 0}
# dict.fromkeys(sep,value=None)方法创建,sep是可迭代序列,value是可选参数,所有值均相同,默认值是None
dict8 = dict.fromkeys(range(3))
print(dict8)
结果如下:
2.2 访问列表元素
2.2.1 以键(key)访问值(value)
示例如下:
a = {'张无忌': 25, '赵敏': 24}
print(a['张无忌'])
结果如下:
2.2.2 dict.item()方法遍历字典
dict.item()方法返回的是一个二元元组构成的dict_item类型对象,dict_item类型可以遍历,但不能更改
其中二元元组是由字典的键值对构成,示例如下:
a = {'张无忌': 25, '赵敏': 24}
print(a.items())
print(type(a.items()))
for item in a.items(): # item对象由元组构成
print(item)
print(type(item))
for key, value in a.items(): # 元组由键值对构成
print(key, value)
print(type(key), type(value))
结果如下:
2.2.3 dict.key()、dict.value()方法遍历字典的键、值
示例如下:
a = {'张无忌': 25, '赵敏': 24}
print(a.keys())
print(a.values())
print(type(a.keys()), type(a.values()))
for key in a.keys():
print(key)
print(type(key))
for value in a.values():
print(value)
print(type(value))
结果如下:
遍历键、值也可以使用以下方法
a = {'张无忌': 27, '赵敏': 24, '周芷若': 25}
for i in a:
print(i, a[i])
结果如下:
直接对字典遍历,遍历返回的结果就是键,再通过键索引对应的值
2.3 改
修改字典的值直接通过键进行覆盖即可,实例如下:
a = {'张无忌': 27, '赵敏': 24, '周芷若': 25}
a['张无忌'] = 30
print(a)
结果如下:
而修改字典的键则需要先用pop()方法把键值对删掉并取出值,然后再将值和新的键新增至原字典,示例如下:
a = {'张无忌': 27, '赵敏': 24, '周芷若': 25}
a['陈友谅'] = a.pop('张无忌')
print(a)
结果如下:
2.4 增
2.4.1 使用键直接写入键值对
a = {'张无忌': 27, '赵敏': 24, '周芷若': 25}
a['陈友谅'] = 30
print(a)
结果如下:
直接赋值时,键已存在则更新值,不存在则新增键值对
2.4.2 dict.update()方法
dict.update()方法的参数是关键字参数或者字典,示例如下:
# 参数为关键字参数,参数不能以数字开头,key不存在则增加,存在则更新value
a = {'张无忌': 27, '赵敏': 24, '周芷若': 25}
a.update(白眉鹰王=80, 成昆=50, 张无忌=30)
print(a)
# 参数为字典,key不存在则增加,存在则更新value
b = {'张无忌': 27, '赵敏': 24, '周芷若': 25}
c = {'白眉鹰王': 80, '成昆': 50, '张无忌': 30}
b.update(c)
print(b)
结果如下:
2.4.3 dict.setdefault()方法
setdefault(key,value)方法增加键值对的逻辑是:如果key存在,则不更改,同时返回原字典中对应key的值;如果key不存在,则添加键值对,并返回key对应的值
示例如下:
# key存在不做变更,同时返回原字典中键-张无忌对应的值-27
a = {'张无忌': 27, '赵敏': 24, '周芷若': 25}
b = a.setdefault('张无忌', 30)
print(a)
print(b)
# key不存在则添加键值对,同时返回新增键-白眉鹰王对应的值-30
c = {'张无忌': 27, '赵敏': 24, '周芷若': 25}
d = c.setdefault('白眉鹰王', 30)
print(c)
print(d)
结果如下:
2.5 删
2.5.1 del()函数
del()函数通过指定键的方法删除键值对,示例如下:
a = {'张无忌': 27, '赵敏': 24, '周芷若': 25}
del a['张无忌']
print(a)
结果如下:
2.5.2 pop()方法
pop()方法通过指定键的方法删除键值对,并返回对应的值,示例如下:
a = {'张无忌': 27, '赵敏': 24, '周芷若': 25}
b = a.pop('张无忌')
print(a)
print(b)
结果如下:
2.5.3 clear()方法
clear()方法清空字典所有元素,保留空字典,示例如下:
a = {'张无忌': 27, '赵敏': 24, '周芷若': 25}
a.clear()
print(a)
结果如下: