1. 什么是字典
字典(dict)是由“键-值(key-val)”对构成的数据类型,一对键(key)和值(value)之间存在一定的对应关系。
语法:d = {key1:value1, key2:value2}
# 创建一个字典,保存张三(24岁)、李四(25岁)、王五(26岁)的年龄信息。
dict_exampe = {
"张三": 24,
"李四": 25,
"王五": 26,
"赵六": 24
}
上面的示例中,“张三”、“李四”、"王五"就是字典的key(键),年龄值24、25、26就是字典的值。
关于字典,需要注意:
- 字典的定义要用大括号
{}
- key和value之间使用冒号
:
分隔 - 不同的key-value对之间使用逗号
,
分隔 - 一个key-value对也被称为item。
- 在一个字典中,key必须是唯一的,而value可以不唯一。例如,在上面的示例中,只允许有一个"张三",但是允许有多个人都是24岁。
- value可以是任何数据类型,字符串、数字、列表、字典等等。
- key必须是不可变类型,例如字符串、数字。
- 字典是无序的,也就说,虽然你在定义的时候把
"张三": 24
放在了最前面,但是计算机在处理或者保存的时候,它并不一定是第一个。 - 字典的查询速度非常快,而且不受字典大小的影响。
注:基于字典的上述特性,我们在处理大量数据并且需要频繁查询时,优先考虑用字典。
2. 创建字典
字典的创建方式有多种,例如:
# 方式1
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example)
# 方式2
dict_example = dict({"张三": 24, "李四": 25, "王五": 26, "赵六": 24})
print(dict_example)
# 方式3
# 假设现在需要创建一个字典,它的key分别为"张三"、"李四"、"王五"、"赵六",但这些key对应的value都是24,那么可以定义如下:
dict_example = {}.fromkeys(["张三", "李四", "王五", "赵六"], 24)
print(dict_example)
3. 向字典中增加内容
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example)
# 向字典中添加老王的年龄信息
dict_example["老王"] = 40
print(dict_example)
4. 从字典中删除内容
4.1 pop(): 删除指定key-value
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example)
# 删除张三的相关信息
dict_example.pop("张三")
print(dict_example)
经验总结:观察上面的执行结果我们可以看到,当执行dict_example.pop("张三")
时,它会把张三
对应的key-value对从字典中删除,同时它会返回张三
对应的value信息(也就是张三的年龄)。在实际项目中,如果需要得到这个值,可以将其保存到变量中,例如: age = dict_example.pop("张三")
。
4.2 del: 删除指定key-value
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example)
# 删除张三的相关信息
del dict_example["张三"]
print(dict_example)
注:del
和pop()
都可以用来删除指定的key-value,但区别在于del
不会返回value值,也就是不会返回张三
对应的年龄值。
4.3 clear(): 清空字典
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example)
# 清空字典
dict_example.clear()
print(dict_example)
4.4 popitem(): 随机删除一个key-value对
popitem()
比较奇葩,它会随机从字典中删除一个key-value对,并将其作为返回值。老王在实际项目中,还真没用过这种…
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example)
# 随机删除一个key-value对
dict_example.popitem()
print(dict_example)
5. 修改字典
5.1 直接赋值
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example)
# 如果想要修改李四的年龄,直接赋值就可以
dict_example["李四"] = 30
print(dict_example)
总结:修改字典和添加新元素的语法是相同的,都是dict[key] = val
。如果key在当前字典中不存在,那就创建一个新的key-value对,如果key在当前字典中存在,那么就用新的value替换旧的value。
5.2 update(): 将其他字典合并到当前字典
update()
是把另一个字典(dict2)合并到当前字典(dict1)中。如果dict2中的key在dict1中存在,那么就用dict2中的value替换dict1中的value;如果dict2中的key在dict1中不存在,那么就将dict2的key-value对添加到dict1中。
dict_1 = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
dict_2 = {"李四": 30, "老王": 40}
print(dict_1)
print(dict_2)
# 将dict_2合并到dict_1中
dict_1.update(dict_2)
print(dict_1)
print(dict_2)
6. 查询字典
6.1 dict[key]: 获取特定key对应的value
dict[key]
: 通过key,可以查到对应的value。
使用该方法,如果传入的key在字典中不存在,则程序会运行出错。
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
# 查询张三的年龄
print(dict_example["张三"])
# 查询老王的年龄,老王并不在字典中,所以会出错
print(dict_example["老王"])
6.2 dict.get(): 获取特定key对应的value
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
# 查询张三的年龄,如果张三在字典中不存在,则返回20.
print(dict_example.get("张三", 20))
# 查询老王的年龄,如果老王在字典中不存在,则返回40.
print(dict_example.get("老王", 40))
注:dict.get()
的优势在于它可以配置一个默认值,当传入的key在字典中不存在时,它会返回配置的默认值,而不导致程序运行崩溃出错。当不传入默认值时,它会使用None
作为默认值。
6.3 in: 判定key是否在字典中
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
if "张三" in dict_example:
print("张三的年龄是{}岁。".format(dict_example["张三"]))
else:
print("未找到张三的年龄信息。")
6.4 dict.keys(): 返回字典中的所有key
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example.keys())
6.5 dict.values(): 返回字典中的所有value
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example.values())
6.6 dict.items(): 返回字典中的所有key-value对
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example.items())
7. 遍历字典
# 方式1:推荐该方式,效率高
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
for k in dict_example:
print("{}的年龄是{}岁。".format(k, dict_example[k]))
# 方式2
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
for k in dict_example.keys():
print("{}的年龄是{}岁。".format(k, dict_example[k]))
# 方式3
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
for k,v in dict_example.items():
print("{}的年龄是{}岁。".format(k, v))
8. 获取字典长度
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
dict_len = len(dict_example)
print("字典中包含{}个元素。".format(dict_len))