dictionary 是 Python 中的一种内建资料结构,用来存放键值对(key-value pairs)。与列表不同,字典中的元素是无序的,每个元素由一个**键(key)和一个值(value)**组成,键是唯一的,而值则可以是任何资料类型。
字典的特点:
- 无序的:字典不像列表,没有元素的顺序。
- 键唯一:每个键在字典中是唯一的,但值可以重复。
- 键必须是不可变的:键通常是数字、字串或元组等不可变类型,但不能是列表或其他可变类型。
如何建立字典
1.使用变数建立一个空字典my_dict = {}2.或直接建立一个有值的字典
my_dict = {
"name": "Alice",
"age": 25,
"city": "New York"}
3.使用变数和函数dict()建立一个空字典my_dict = dict()my_dict = dict(name=\'Alice\', age=25, city=\'New York\')
Dict Comprehension 进阶建立字典方式
{key: value for item in iterable if condition}{key: value运算 for key,value in 内容 if条件}
1. 使用字典生成式转换现有字典的值
# 原始字典
students_scores = {"Alice": 75, "Bob": 80, "Charlie": 65}
# 使用进阶字典生成式,将成绩提升 10 分
updated_scores = {name: score + 10 for name, score in students_scores.items()}
print(updated_scores)
# Output: {\'Alice\': 85, \'Bob\': 90, \'Charlie\': 75}
2. 过滤条件建立字典
可以使用条件来筛选数据,只建立满足条件的键值对。例如,只保留成绩高于 70 的学生。
# 原始字典
students_scores = {"Alice": 75, "Bob": 80, "Charlie": 65}
# 使用条件过滤出高于 70 的成绩
passing_scores = {name: score for name, score in students_scores.items() if score > 70}
print(passing_scores)
# Output: {\'Alice\': 75, \'Bob\': 80}
3. 嵌套字典生成式
如果你有巢状结构的资料,例如有多班学生成绩,可以使用字典生成式处理巢状结构。例如,我们将每个班级的成绩提升 5 分:
# 巢状结构的成绩字典
classes_scores = {
"Class A": {"Alice": 75, "Bob": 80},
"Class B": {"Charlie": 65, "David": 90}
}
# 使用嵌套字典生成式将成绩提升 5 分
updated_classes_scores = {
class_name: {name: score + 5 for name, score in scores.items()}
for class_name, scores in classes_scores.items()
}
print(updated_classes_scores)
# Output: {\'Class A\': {\'Alice\': 80, \'Bob\': 85}, \'Class B\': {\'Charlie\': 70, \'David\': 95}}
4. 使用字典生成式来翻转字典
翻转字典是指把原来字典的「键」和「值」对调。假设有一个包含学生姓名和 ID 的字典,我们希望反转它:
# 原始字典
student_ids = {"Alice": 1001, "Bob": 1002, "Charlie": 1003}
# 翻转字典
reversed_dict = {id: name for name, id in student_ids.items()}
print(reversed_dict)
# Output: {1001: \'Alice\', 1002: \'Bob\', 1003: \'Charlie\'}
5. 根据计算结果动态生成字典
字典生成式可以用来计算值。例如,我们想要生成一个数字及其平方的字典:
# 生成 1 到 5 的平方
squares = {num: num ** 2 for num in range(1, 6)}
print(squares)
# Output: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
操作字典的常用方法
my_dict = {name: Alice ,email:123@gmail.com, age:25, city:LA}
my_dict.get("key", "default") | 获取指定键的值,,若不存在则返回 None | my_dict.get("name", \'not found\') → Alice |
my_dict["key"] | 返回对应的值,若键不存在: 会引发 KeyError | print(my_dict["name"]) # 输出: Alice |
dict[key] = value | 新增或修改键值对 | my_dict["age"] = 26 # 更新 age 的值为 26 |
del my_dict["city"] | 删除指定键值对 | del my_dict["city"] # {name: Alice ,email:123@gmail.com, age:25 |
dict.pop(key, default) | 删除指定键并返回其值,若键不存在则返回默认值 | my_dict.pop("email") # {name: Alice, age:25, city: LA} |
my_dict.keys() | 返回所有的键 | my_dict.keys() → dict_keys([\'name\', \'age\']) |
my_dict.values() | 返回所有的值 | my_dict.values() → dict_values([\'Alice\', 26]) |
my_dict.items() | 返回所有的键值对 | my_dict.items() → dict_items([(\'name\', \'Alice\'), (\'age\', 26)]) |
my_dict.clear() | 清空字典 | my_dict.clear() → {} |
my_dict.pop(key) | 删除指定键,并返回对应的值 | my_dict.pop("age") → 26 |
print(len(my_dict)) | 使用 len() 函数获取字典中项目的数量 | print(len(my_dict)) # 输出: 4 |
检查键是否存在
可以使用 in 关键字检查某个键是否存在于字典中:
if "name" in my_dict:
print("Name is in the dictionary") # 输出: Name is in the dictionary`
迭代字典
可以使用迴圈遍历字典的键和值:
for key, value in my_dict.items():
print(f"{key}: {value}")
进阶setdefault(key,default=None)
setdefault() 是 Python 字典(dict)中的一个方法,用来在字典中查找指定的键(key)。如果该键已经存在,则返回键对应的值;如果该键不存在,则将该键和给定的默认值(default)加入字典,并返回该默认值。dict.setdefault(key, default=None
setdefault() 简化了检查并设置默认值的过程,帮助编写更清晰、简洁的代码。
# 范例字典
my_dict = {\'name\': \'Alice\', \'age\': 25}
# 情况1:键存在
# \'name\' 已经存在于字典中,因此返回该键的值 \'Alice\'
result1 = my_dict.setdefault(\'name\', \'Unknown\')
print(result1) # 输出: \'Alice\'
print(my_dict) # 输出: {\'name\': \'Alice\', \'age\': 25}
# 情况2:键不存在
# \'location\' 不存在于字典中,因此将 \'location\': \'Unknown\' 加入字典
result2 = my_dict.setdefault(\'location\', \'Unknown\')
print(result2) # 输出: \'Unknown\'
print(my_dict) # 输出: {\'name\': \'Alice\', \'age\': 25, \'location\': \'Unknown\'}
为什么使用 setdefault()?
使用 setdefault() 可以减少多余的 if 检查,特别是在更新嵌套结构(如列表或字典)时。例如:
# 使用 setdefault() 设置嵌套字典
data = {}
# 如果 \'user1\' 不存在,则添加并设置 \'age\' 的值
data.setdefault(\'user1\', {}).setdefault(\'age\', 30)
print(data) # 输出: {\'user1\': {\'age\': 30}}
setdefault() 简化了检查并设置默认值的过程,帮助编写更清晰、简洁的代码。
get() 是 Python 字典(dict)中的一个函式方法
与直接用键索引的方式(如 dict[key])不同的是,get() 方法可以让你在键不存在时返回一个自定义的默认值,而不会引发 KeyError 错误。dictionary.get(key, default=None)
典型应用场景
避免 KeyError:使用 get() 可以避免因键缺失而报错,从而减少程序崩溃的风险。指定默认值:在处理缺失键时可以提供一个默认值,这在数据处理和清洗中很常见。
# 建立一个字典
my_dict = {\'name\': \'Alice\', \'age\': 25}
# 情况 1:键存在
# 查找 \'name\' 键的值,因为存在于字典中,返回 \'Alice\'
result1 = my_dict.get(\'name\')
print(result1) # 输出: Alice
# 情况 2:键不存在,没有指定默认值
# 查找 \'location\' 键,因为不存在于字典中,返回 None
result2 = my_dict.get(\'location\')
print(result2) # 输出: None
# 情况 3:键不存在,指定默认值
# 查找 \'location\' 键,因为不存在,返回指定的默认值 \'Unknown\'
result3 = my_dict.get(\'location\', \'Unknown\')
print(result3) # 输出: Unknown