字典dict(dictionary)
以 键 - 值对 (key - value pairs)的形式存储数据
定义
- 字典使用花括号 {} 来定义,键和值之间用冒号 : 分隔,不同键值对之间用逗号 , 分隔
- 也可以通过 dict() 函数定义
# 直接使用{}定义
my_dict = {'name':'echo','age':'24','city':'shanghai'}
# 使用 dict() 函数定义
my_dict2 = dict(name='echo',age='24',city='shanghai')
print(my_dict)
print(my_dict2)
特点
- 无序性 :键值对没有特定的顺序,不能通过索引来访问,只能通过键来访问对应的值
- 字典的可变性 :可以添加、删除或修改字典中的键值对
- 键的唯一性 :键是唯一的,如果多次赋值,会覆盖;
- 键的不可变性 :dict通过key计算位置的算法即为哈希算法Hash,dict的key必须是不可变对象,如字符串、整数等;但列表list可变,不可作为key
常用操作
1.访问值
- 通过方括号 [ ]
如果键不存在,会抛出keyError异常
my_dict = {'name':'echo','age':'24','city':'shanghai'}
value1 = my_dict['name']
#value_test = my_dict['test']#如果键不存在,会抛出keyError异常
print(value1)
#print(value_test)
- 通过 get() 方法
如果键不存在,会返回 None ,或者自己 指定的value
my_dict = {'name':'echo','age':'24','city':'shanghai'}
value2 = my_dict.get('city')
value3 = my_dict.get('mood')#如果键不存在,会返回None,或者自己指定的value
value4 = my_dict.get('mood','happy')
print(value2)
print(value3)
print(value4)
- 通过 in 判断key是否存在
my_dict = {'name':'echo','age':'24','city':'shanghai'}
print('mood' in my_dict)
2.添加键值对
直接使用 [ ] 赋值来添加新的键值对
my_dict = {'name':'echo','age':'24','city':'shanghai'}
my_dict['wealth'] = 'priceless'
print(my_dict['wealth'])
3.修改值
通过指定键来修改对应的值
my_dict = {'name':'echo','age':'24','city':'shanghai'}
print(my_dict)
my_dict['age'] = 1
print(my_dict['age'])
4.删除键值对
- 使用 del 关键字
使用 del 语句根据键删除对应的键值对,如果键不存在,会抛出KeyError异常
my_dict = {'name':'echo','age':'24','city':'shanghai'}
del my_dict['age']
print (my_dict)
# del my_dict['mood'] #如果键不存在,会抛出KeyError异常
- 使用 pop() 方法
pop() 方法根据键删除对应的键值对,并 返回该键对应的值 ,如果键不存在且未指定默认值,会引发 KeyError
my_dict = {'name':'echo','age':'24','city':'shanghai'}
value = my_dict.pop('city')
print(value)
print(my_dict) #dict内部存放的顺序和key放入的顺序是没有关系的
5.遍历字典
- 遍历键
通过 keys() 方法遍历键
my_dict = {'name':'echo','age':'24','city':'shanghai'}
for key in my_dict.keys():
print(key)
- 遍历值
使用 values() 方法遍历值
my_dict = {'name':'echo','age':'24','city':'shanghai'}
for value in my_dict.values():
print(value)
- 遍历键值对
使用 items() 方法遍历键值对
my_dict = {'name':'echo','age':'24','city':'shanghai'}
for key,value in my_dict.items():
print(f'{key}:{value}')
6.合并字典
可以使用 update() 方法将一个字典的键值对合并到另一个字典中
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
dict1.update(dict2)
print(dict1) # 输出: {'a': 1, 'b': 3, 'c': 4}
性能
- 查找:字典的查找操作平均时间复杂度为 O(1) ,因为底层使用 () 哈希表实现
- 插入/删除:插入和删除操作的平均时间复杂度也是 O(1)
应用场景
- 存储配置信息:将各种配置参数以键值对的形式存储在子典中,方便读取和修改
- 统计词频:同此出现的次数
- 缓存数据:将计算结果或者从数据库查询到的数据存储到字典中,以提高后续访问速度
dict和list的区别
1. dict
- 查找和插入的速度极快,不会随着key的增加而慢
- 需要占用大量的内存,内存耗费大
2. list - 查找和插入的时间随着元素的增加而增加
- 占用空间小,浪费内存很少
所以, dict是用空间来换取时间的一种方法