1、概述
- 可变,可以存储任意类型的数据
- 键唯一:存储键值对,每个键都是唯一的
- 无序
2、字典的基本使用
2.1、创建
你可以使用花括号 {} 或 dict() 函数来创建一个字典。
# 使用花括号创建字典
my_dict = {'apple': 1, 'banana': 2, 'cherry': 3}
# 使用dict()函数创建字典
another_dict = dict(apple=1, banana=2, cherry=3)
# 也可以这样创建空字典
empty_dict = {}
# 或者
another_empty_dict = dict()
2.2、访问和修改、添加
访问
my_dict = {'apple': 1, 'banana': 2, 'cherry': 3}
#访问
print(my_dict['apple']) # 输出: 1
如果尝试访问一个不存在的键,将会抛出一个 KeyError 异常。为了避免这种错误,你可以使用 get() 方法,它可以提供一个默认值。
print(my_dict.get('orange', 'Not found')) # 输出: 'Not found'
修改
my_dict['apple'] = 100
print(my_dict['apple']) # 输出: 100
添加键值对
my_dict['date'] = '2023-09-17'
print(my_dict)
2.3、删除键值对
# 使用del语句
del my_dict['banana']
# 使用pop()方法,它会返回被删除的值
value = my_dict.pop('cherry')
2.4、遍历字典
你可以使用 for 循环来遍历字典的键、值或键值对。
my_dict = {'apple': '二个', 'banana': '三个', 'cherry': '四个'}
# 遍历键
for key in my_dict:
print(key) #apple banana cherry
# 遍历值
for value in my_dict.values():
print(value) #二个 三个 四个
# 遍历键值对
for key, value in my_dict.items():
print(key, value) # apple 二个 banana 三个 cherry 四个
3、字典的常用方法
- keys():返回字典中所有的键。
- values():返回字典中所有的值。
- items():返回字典中所有的键值对。
- update():使用另一个字典中的键值对来更新当前字典。
# 创建一个字典
my_dict = {'apple': 1, 'banana': 2, 'cherry': 3}
# 创建一个新的字典,用于更新 my_dict
new_items = {'banana': 200, 'date': '2023-09-17', 'fig': 4}
# 使用 update() 方法更新 my_dict
my_dict.update(new_items)
# 打印更新后的 my_dict
print(my_dict)
# 输出: {'apple': 1, 'banana': 200, 'cherry': 3, 'date': '2023-09-17', 'fig': 4}
# 注意:'banana' 的值从 2 更新为了 200,'date' 和 'fig' 被添加到了字典中
- popitem():随机删除并返回一个键值对(在Python 3.7+中,这个操作是有序的,首先删除最后插入的键值对)。
- clear():删除字典中的所有键值对。
4、字典的内置方法&函数
- dic.clear() 清空字典
- dic.pop(key) 移除键,同时返回此键所对应的值
- dic.popitem() 随机删除一组键值对,同时返回对应的值
- dic.update(dic1) 将字典dic1合并到dic中,如果键相同,则此键的值取dic1的值作为新值
- dic.get(key, default) 返回键key所对应的值,如果没有此键则返回default
- dic.keys() 返回可迭代的dict_keys集合对象
- dic.values() 返回可迭代的dict_values值对象
- cmp(dict1, dict2) 比较两个字典元素
- len(dict) 计算字典元素个数,即键的总数
- str(dict) 输出字典可打印的字符串表示(转成字符串)
- type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型
上面的方法比较好理解下面结合代码讲解一下dic.items()以及dic.copy()
dic.items() 返回可迭代的dict_items对象
#比如下面的例子
my_dict = {'apple': '二个', 'banana': '三个', 'cherry': '四个'}
for key, value in my_dict.items():
print(key, value) # apple 二个 banana 三个 cherry 四个
dic.copy()返回字典dic的副本,只复制一层(浅拷贝)
- 深拷贝:深拷贝是在内存中重新开辟了一个新的内存空间来存储数据
- 浅拷贝:浅拷贝是多个指针指向一份共同的内存
- copy()操作就是浅拷贝
- deepcopy()是深拷贝操作
import copy
# 浅拷贝示例
list = [1, 2, [3, 4]]
cp_list = copy.copy(list)
list[2][0] = 'c'
print(list) # 输出: [1, 2, ['c', 4]]
print(cp_list) # 输出: [1, 2, ['c', 4]]
# 深拷贝示例
list2 = [1, 2, [3, 4]]
dc_list = copy.deepcopy(list2)
list2[2][0] = 'c'
print(list2) # 输出: [1, 2, ['c', 4]]
print(dc_list) # 输出: [1, 2, [3, 4]]
上面代码我们分析一下,浅拷贝list得到cp_list,实际上list和cp_list同时指向内存地址中的[1, 2, [3, 4]],这个时候只要改变list的话cp_list也跟着改变。深拷贝中,深拷贝list2得到dc_list,这个时候list2和dc_list指向的内存地址是两份,改变list2不影响dc_list