目录
Python中的六大数据类型(数字、字符串、列表、元组、字典和集合),我们已经讲清楚了前4个,现在我们开始讲解Python中的字典(键值对)数据类型。
在 Python 中,字典(Dictionary)是一种无序、可变的数据类型,用于存储键(key)和值(value)之间的映射关系。并且可以根据键快速检索值。除了基本的添加、删除、获取值之外,还有许多强大的技巧和方法可以让我们更好地利用字典。这里,我们旨在介绍Python 字典的使用方法,并提供一些技巧,希望能帮助大家更好地理解字典数据类型。
1. 创建字典
字典的类型为: d = {key1 : value1, key2 : value2, key3 : value3 }
注意:Key必须是唯一的,但Value则不必。
首先,来看一张图,字典的结构就如同下面的这张图,{ }(大花括号)用来声明字典。字典中的每一个元素都是由键值对组成,也就是Key:Value的组合。这里的冒号 : 是用来分割键值对的。同时,Value元素的类型,可以是任何类型的组合。
创建字典,可以由以下几种方法。
# 1. 使用大括号 {} 创建空字典:
my_dict = {}
# 2. 使用键值对创建字典:
my_dict = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
# 3. 使用 dict() 构造函数:
my_dict = dict(key1='value1', key2='value2', key3='value3')
# 4. 使用列表/元组的列表转换为字典:
# 列表中每个元素是一个包含键值对的元组
my_list = [('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3')]
my_dict = dict(my_list)
# 或者使用zip函数
keys = ['key1', 'key2', 'key3']
values = ['value1', 'value2', 'value3']
my_dict = dict(zip(keys, values))
# 5.使用推导式出创建一个列表
# 创建一个简单的字典,键为数字 0 到 4,值为它们的平方
my_dict = {x: x**2 for x in range(5)}
print(my_dict)
# 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
2. 访问字典中的值
要访问Python字典中的值,你可以使用字典的键(keys)来获取对应的值(values),对比一下,就会发现前面我们学的List(列表)就只能以索引的方式来获取对于的值。这里有几种访问字典中的值常见的方法:
2.1 方括号 []
使用方括号 [] 和键名访问值:
my_dict = {"a": 1, "b": 2, "c": 3}
# 访问键为 "a" 的值
value_a = my_dict["a"]
print(value_a) # 输出: 1
# 访问键为 "b" 的值
value_b = my_dict["b"]
print(value_b) # 输出: 2
2.2 get()
方法:
使用 get() 方法,获取键值对。
my_dict = {"a": 1, "b": 2, "c": 3}
# 使用 get() 方法获取键为 "c" 的值
value_c = my_dict.get("c")
print(value_c) # 输出: 3
# 如果键不存在,get() 方法会返回 None
value_d = my_dict.get("d")
print(value_d) # 输出: None
# 也可以提供一个默认值,如果键不存在则返回该默认值
value_e = my_dict.get("e", 0) # 默认值为 0
print(value_e) # 输出: 0
除了上面的方法,使用 get() 方法可以实现类似于 switch 语句的功能,下面简单演示:
def switch_case(argument):
switcher = {
1: "January",
2: "February",
3: "March",
4: "April",
5: "May",
6: "June",
7: "July",
8: "August",
9: "September",
10: "October",
11: "November",
12: "December"
}
return switcher.get(argument, "Invalid month")
# 测试
month_name = switch_case(3)
print(month_name) # 输出: March
invalid_month = switch_case(13)
print(invalid_month) # 输出: Invalid month
2.3 遍历键值对
遍历所有的键值对。
my_dict = {"a": 1, "b": 2, "c": 3}
# 遍历键值访问
for key, value in my_dict.items():
print(key, value)
# 输出
a 1
b 2
c 3
2.4 只遍历键
只遍历所有的键。
my_dict = {"a": 1, "b": 2, "c": 3}
# 遍历所有的键
for key in my_dict.keys():
print(key)
# 输出
a
b
c
2.5 只遍历值
只遍历所有的值。
my_dict = {"a": 1, "b": 2, "c": 3}
# 遍历所有的值
for value in my_dict.values():
print(value)
# 输出
1
2
3
3. 修改字典中的(键值对)
字典是可变的数据类型,所以可以通过添加和更新键值对,来更新字典。下面是几种操作方法:
3.1 添加新的键值对
my_dict = {"a": 1, "b": 2}
# 添加新的键值对 "c": 3
my_dict["c"] = 3
print(my_dict)
# 输出: {'a': 1, 'b': 2, 'c': 3}
3.2 更新已有键的值
my_dict = {"a": 1, "b": 2}
# 更新键 "b" 的值为 5
my_dict["b"] = 5
print(my_dict)
# 输出: {'a': 1, 'b': 5, 'c': 3}
3.3 update()
方法
使用 update() 方法批量添加或更新键值对:
my_dict = {"a": 1, "b": 2}
# 使用 update() 方法批量添加或更新键值对
my_dict.update({"d": 4, "e": 5})
print(my_dict)
# 输出: {'a': 1, 'b': 5, 'c': 3, 'd': 4, 'e': 5}
3.4 setdefault()
方法
使用 setdefault() 方法添加键值对,但仅在键不存在时:
my_dict = {"a": 1, "b": 2}
# 使用 setdefault() 方法添加键值对,但仅在键不存在时
my_dict.setdefault("f", 6)
print(my_dict)
# 输出: {'a': 1, 'b': 2, 'f': 6}
# 如果键已存在,则不会进行任何操作
my_dict.setdefault("a", 10)
print(my_dict)
# 输出:{'a': 1, 'b': 2, 'f': 6}
3.5 键不存在时
如果键不存在时执行特定操作:
my_dict = {"a": 1, "b": 2}
# 如果键不存在,可以在代码中指定一个操作
if "g" not in my_dict:
my_dict["g"] = 7
print(my_dict)
# 输出: {'a': 1, 'b': 2, 'g': 7}
4. 删除字典中的键值对
既然可以更新键值对,那么删除自然也是可以的,在Python中删除字典(dictionary)中的键值对,你可以使用以下方法:
4.1 del
关键字
使用 del 关键字删除指定键值对:
my_dict = {"a": 1, "b": 2, "c": 3}
# 删除键为 "a" 的键值对
del my_dict["a"]
print(my_dict)
# 输出: {'b': 2, 'c': 3}
4.2 pop()
方法
使用 pop()
方法删除指定键值对并返回其值:
my_dict = {"a": 1, "b": 2, "c": 3}
# 删除键为 "b" 的键值对,并返回被删除的值
deleted_value = my_dict.pop("b")
print(deleted_value) # 输出: 2
print(my_dict) # 输出: {'a': 1, 'c': 3}
4.3 popitem()
方法
使用 popitem() 方法删除并返回最后一个键值对。这是栈的思想。后进先出。
my_dict = {"a": 1, "b": 2, "c": 3}
# 删除并返回任意的键值对
removed_item = my_dict.popitem()
print(removed_item) # 输出: ('c', 3)
print(my_dict) # 输出: {'a': 1, 'b': 2}
4.4 清空字典
清空字典中的所有键值对:
my_dict = {"a": 1, "b": 2, "c": 3, "d": 3}
# 清空字典
my_dict.clear()
print(my_dict)
# 输出: {}
4.5 删除整个字典
使用 del 关键字删除整个字典:
my_dict = {"a": 1, "b": 2, "c": 3, "d": 3}
# 删除整个字典
del my_dict
# 此时再访问 my_dict 将会引发 NameError
5. defaultdict
在Python中,collections
模块提供了defaultdict
类,它是字典的一个子类,提供了一个默认值,这样当访问不存在的键时,会自动创建对应默认值的项。这对于处理缺失键的情况非常有用。
# 导入 collections 模块
from collections import defaultdict
# 创建一个 defaultdict,指定默认值为 int 类型(默认为 0)
my_dict_int = defaultdict(int)
# 访问一个不存在的键,会自动创建并初始化为默认值
print(my_dict_int["a"]) # 输出: 0
# 字典中的 "a" 键现在已经被创建
print(my_dict_int) # 输出: defaultdict(<class 'int'>, {'a': 0})
# 创建一个 defaultdict,指定默认值为 str 类型(默认为空字符串)
my_dict_str = defaultdict(str)
print(my_dict_str["b"]) # 输出: ""
# 字典中的 "b" 键现在已经被创建
print(my_dict_str) # 输出: defaultdict(<class 'str'>, {'b': ''})
注意事项:
defaultdict
中的默认值是在调用__getitem__()
方法时创建的,而不是在字典创建时。- 你可以像普通字典一样使用
defaultdict
的所有方法。
这里技巧是:defaultdict
可以让你更加方便地处理缺失键的情况,避免了使用 dict.setdefault()
或者 if
语句来初始化新键的值。
6. Counter
在collections
模块中,除了前面讲到的defaultdict
,另一个 Counter
类也常用于统计可迭代对象中元素的数量:
from collections import Counter
# 创建一个 Counter 对象
c = Counter(['a', 'b', 'a', 'c', 'a', 'b'])
# 访问元素出现的次数
print(c['a']) # 输出: 3
print(c['b']) # 输出: 2
print(c['c']) # 输出: 1
# 可以直接传入字符串来统计字符出现的次数
word_counts = Counter("hello world")
print(word_counts) # 输出: Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
# Counter 也可以像字典一样遍历
for key, value in word_counts.items():
print(f"{key}: {value}")
# 获取最常见的元素
print(word_counts.most_common(2)) # 输出: [('l', 3), ('o', 2)]
技巧
提示: Counter
特别适用于统计词频、元素出现次数等需求。
结语
Python 字典在实际编程中广泛应用。那么,关于 字典数据类型及其操作的函数讲解和示例代码,基本上讲完了。希望这些技巧能帮助你更好地利用 Python 中的字典!大家可以尝试着跟着代码一起学习,如果后面还有补充的,我将继续为大家分享。
感谢您的关注,我们下一篇文章将继续学习、记录python的下一个知识点。
如果感觉阅读对您还有些作用,可以评论留言,关注我。谢谢您的阅读!
往期学习:
VSCode安装教程(版本:1.87.0)Windows10