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