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)

结果如下:

posted @ 2021-05-06 11:19  弓长无忌  阅读(24)  评论(0编辑  收藏  举报