字典dict
dict_python
- 字典(dicy)是一种可变的数据结构,它是由键(key)和对应的值(value)组成的无序集合。
- 字典中的键必须是唯一的,而值可以是任意类型的对象。可以使用大括号 {} 来创建一个字典,并使用冒号 : 来分隔键和值。
1.字典的实现原理
- 字典的实现原理与查字典类似,查字典是先根据部首或拼音查找对应的页码,python中的字典是根据key查找value所在的位置。
2.字典的特点
- 字典中的所有元素都是一个 key-value 对,key不允许重复,value可以重复
- 字典中的元素是无序的
- 字典中的key必须是不可变对象
- 字典可以根据需要动态地伸缩
- 字典会浪费较大的内存,是一种使用空间换时间的数据结构
3.字典的创建
- 最常用的创建方式:使用花括号
scores = {'张三': 100, '李四': 98, '王五': 45}
# {'张三': 100, '李四': 98, '王五': 45}
- 使用内置函数
student = dict(name = 'Jack', age = 20);
# {'name': 'Jack', 'age': 20}
- 空字典
d = {}
d2 = dict()
# {}
4.字典的常用操作
- []取值与使用get()取值的区别
scores = {'张三': 100, '李四': 98, '王五': 45}
print(scores['张三']) # 100
print(scores.get('张三')) # 100
print(scores['美羊羊']) # 报错:KeyError: '美羊羊'
print(scores.get('美羊羊')) # None
print(scores.get('沸羊羊', 99)) # 99是在查找指定的key不存在返回的默认结果
- 判断指定元素是否存在字典中
scores = {'张三': 100, '李四': 98, '王五': 45}
print('张三' in scores) # True
print('张三' not in scores) # False
- 新增、删除、修改、清空
scores = {'张三': 100, '李四': 98, '王五': 45}
scores['陈六'] = 89
print(scores) # {'张三': 100, '李四': 98, '王五': 45, '陈六': 89}
del scores['张三'] # 删除指定的key-value对
print(scores) # {'李四': 98, '王五': 45, '陈六': 89}
scores['陈六'] = 100
print(scores) # {'李四': 98, '王五': 45, '陈六': 100}
scores.clear()
print(scores) # {}
- 获取字典视图的三个方法
scores = {'张三': 100, '李四': 98, '王五': 45}
# 获取所有的key
keys = scores.keys()
print(keys) # dict_keys(['张三', '李四', '王五'])
print(type(keys)) # <class 'dict_keys'>
print(list(keys)) # ['张三', '李四', '王五'] 将所有的key组成的视图转成列表
# 获取所有的value
values = scores.values()
print(values) # dict_values([100, 98, 45])
print(type(values)) # <class 'dict_values'>
print(list(values)) # [100, 98, 45]
# 获取所有的 key-value 对
item = scores.items()
print(item) # dict_items([('张三', 100), ('李四', 98), ('王五', 45)])
print(list(item)) # [('张三', 100), ('李四', 98), ('王五', 45)] 转换之后的列表元素是由元组组成
- 字典元素的遍历
scores = {'张三': 100, '李四': 98, '王五': 45}
for item in scores:
print(item, scores[item], scores.get(item))
5.字典生成式
items = ['Fruits', 'Books', 'Others']
prices = [96, 78, 85, 100, 120]
d = {item.upper(): price for item, price in zip(items, prices) }
print(d) # {'FRUITS': 96, 'BOOKS': 78, 'OTHERS': 85}