这是一个非常基础且重要的方法,理解它对于高效地操作字典至关重要。

items() 是什么?
items() 是 Python 字典的一个内置方法,它返回一个视图对象(dictionary view object),这个视图对象展示了字典中的键值对(key-value pairs)的动态视图。
核心特点:视图对象
这是理解 items() 最关键的一点,视图对象不是列表,也不是元组,它是一个“视图”,这意味着:
- 动态性:视图对象是字典的一个“窗口”,当字典本身发生改变时(比如添加、删除或修改键值对),视图对象会立即反映这些变化,你不需要重新调用
items()。 - 惰性计算:视图对象不会在创建时立即生成所有键值对的数据副本,而是在你迭代或访问它时才按需生成,这使得它在处理大型字典时非常高效。
语法
dictionary.items()
它不接受任何参数。
返回值
返回一个 dict_items 对象,你可以直接在 for 循环中迭代它,或者使用 list()、tuple() 等函数将其转换为列表或元组。

使用示例
示例 1:基本用法和迭代
这是最常见的用法,用于遍历字典的所有键值对。
# 创建一个示例字典
student_grades = {
"Alice": 95,
"Bob": 88,
"Charlie": 92
}
# 使用 items() 获取视图对象
items_view = student_grades.items()
print(f"items_view 的类型: {type(items_view)}")
# 输出: items_view 的类型: <class 'dict_items'>
# 输出视图对象的内容
print(f"视图对象的内容: {items_view}")
# 输出: 视图对象的内容: dict_items([('Alice', 95), ('Bob', 88), ('Charlie', 92)])
# 使用 for 循环迭代视图对象(这是最推荐的方式)
print("\n--- 遍历键值对 ---")
for key, value in student_grades.items():
print(f"学生: {key}, 成绩: {value}")
# 输出:
# --- 遍历键值对 ---
# 学生: Alice, 成绩: 95
# 学生: Bob, 成绩: 88
# 学生: Charlie, 成绩: 92
注意:在 for 循环中,for key, value in my_dict.items() 是 Pythonic 的标准写法,比先 for key in my_dict 再 my_dict[key] 更简洁高效。
示例 2:动态性演示
让我们修改字典,看看视图对象是如何变化的。
# 继续使用上面的 student_grades 字典
print(f"原始视图: {student_grades.items()}")
# 添加一个新的键值对
student_grades["David"] = 76
print(f"添加 'David' 后的视图: {student_grades.items()}")
# 输出: 添加 'David' 后的视图: dict_items([('Alice', 95), ('Bob', 88), ('Charlie', 92), ('David', 76)])
# 修改一个已有的值
student_grades["Alice"] = 98
print(f"修改 'Alice' 后的视图: {student_grades.items()}")
# 输出: 修改 'Alice' 后的视图: dict_items([('Alice', 98), ('Bob', 88), ('Charlie', 92), ('David', 76)])
# 删除一个键值对
del student_grades["Bob"]
print(f"删除 'Bob' 后的视图: {student_grades.items()}")
# 输出: 删除 'Bob' 后的视图: dict_items([('Alice', 98), ('Charlie', 92), ('David', 76)])
可以看到,视图对象始终与字典的当前状态保持同步。

示例 3:转换为列表或元组
虽然可以直接迭代视图对象,但有时你可能需要一个静态的列表或元组副本。
person = {"name": "Eve", "age": 30, "city": "New York"}
# 转换为列表
items_list = list(person.items())
print(f"列表形式: {items_list}")
# 输出: 列表形式: [('name', 'Eve'), ('age', 30), ('city', 'New York')]
# 转换为元组
items_tuple = tuple(person.items())
print(f"元组形式: {items_tuple}")
# 输出: 元组形式: (('name', 'Eve'), ('age', 30), ('city', 'New York'))
重要提示:一旦转换成了列表或元组,它就与原始字典脱钩了,之后对字典的修改不会影响这个列表或元组。
示例 4:检查成员关系
你可以使用 in 关键字来检查某个键值对是否存在于视图中。
person = {"name": "Eve", "age": 30}
# 检查键值对是否存在
# 注意:键值对是一个元组,所以要用元组的形式来检查
print(f"('name', 'Eve') 在字典中吗? {('name', 'Eve') in person.items()}")
# 输出: ('name', 'Eve') 在字典中吗? True
print(f"('age', 31) 在字典中吗? {('age', 31) in person.items()}")
# 输出: ('age', 31) 在字典中吗? False
与其他视图方法的对比
Python 字典有三个视图方法,它们经常被一起提及:
| 方法 | 返回值 | 描述 |
|---|---|---|
dict.keys() |
dict_keys 对象 |
一个包含字典所有键的动态视图。 |
dict.values() |
dict_values 对象 |
一个包含字典所有值的动态视图。 |
dict.items() |
dict_items 对象 |
一个包含字典所有键值对(元组形式)的动态视图。 |
my_dict = {'a': 1, 'b': 2}
print(f"键视图: {my_dict.keys()}") # 输出: 键视图: dict_keys(['a', 'b'])
print(f"值视图: {my_dict.values()}") # 输出: 值视图: dict_values([1, 2])
print(f"键值对视图: {my_dict.items()}") # 输出: 键值对视图: dict_items([('a', 1), ('b', 2)])
items()用于获取字典的键值对视图。- 它返回的是一个动态的
dict_items视图对象,而不是一个列表。 - 主要用途是在
for循环中同时遍历键和值,这是最常用、最推荐的方式。 - 视图对象会随着字典的修改而自动更新。
- 如果需要一个静态的副本,可以使用
list(my_dict.items())或tuple(my_dict.items())将其转换。 - 与
keys()和values()一样,items()提供了一种高效、内存友好的方式来观察字典内容,而无需创建数据的完整副本。
