dict.items() 回傳字典的鍵值對視圖 (dict_items):動態反映字典變化、支援集合運算、可直接解包遍歷。
d = {'Name': 'Zara', 'Age': 7}
items = d.items()
print(items) # dict_items([('Name', 'Zara'), ('Age', 7)])
print(type(items)) #
print(list(items)) # [('Name', 'Zara'), ('Age', 7)]
d = {'a': 1}
items = d.items()
print(list(items)) # [('a', 1)]
d['b'] = 2 # 修改原字典
print(list(items)) # [('a', 1), ('b', 2)] 視圖自動更新!
del d['a']
print(list(items)) # [('b', 2)]
d = {'x': 10, 'y': 20, 'z': 30}
# 直接解包 (推薦)
for k, v in d.items():
print(f'{k} = {v}')
# 僅需值
for v in d.values():
print(v)
# 僅需鍵
for k in d.keys():
print(k)
# 索引 + 鍵值
for i, (k, v) in enumerate(d.items()):
print(i, k, v)
d1 = {'a': 1, 'b': 2, 'c': 3}
d2 = {'b': 2, 'c': 30, 'd': 4}
items1 = d1.items()
items2 = d2.items()
# 交集:鍵值對完全相同
print(items1 & items2) # {('b', 2)}
# 差集:在 d1 但不在 d2
print(items1 - items2) # {('a', 1), ('c', 3)}
# 對稱差集
print(items1 ^ items2) # {('a', 1), ('c', 3), ('c', 30), ('d', 4)}
d = {'a': 1, 'b': 2}
# 列表 (靜態快照)
lst = list(d.items())
print(lst) # [('a', 1), ('b', 2)]
# 集合 (去重、無序)
s = set(d.items())
print(s) # {('a', 1), ('b', 2)}
# 字典 (Py3.8+ 保留插入序)
d2 = dict(d.items())
print(d2) # {'a': 1, 'b': 2}
| 特性 | d.items() | list(d.items()) |
|---|---|---|
| 型別 | dict_items (視圖) | list |
| 記憶體 | O(1) (無複製) | O(n) |
| 動態性 | 即時反映字典變化 | 靜態快照 |
| 集合運算 | 支援 (Py3.9+) | 需轉 set |
| 多次遍歷 | 每次重新迭代 | 可重複使用 |
| 修改字典時遍歷 | RuntimeError | 安全 (遍歷副本) |
d = {'a': 1, 'b': 2}
# 錯誤:RuntimeError: dictionary changed size during iteration
for k, v in d.items():
if v == 1:
del d[k]
# 正確:遍歷靜態快照
for k, v in list(d.items()):
if v == 1:
del d[k]
# 或收集待刪鍵
to_del = [k for k, v in d.items() if v == 1]
for k in to_del:
del d[k]
d = {'z': 1, 'a': 2, 'm': 3}
# 按鍵排序
for k, v in sorted(d.items()):
print(k, v)
# 按值排序
for k, v in sorted(d.items(), key=lambda kv: kv[1]):
print(k, v)
# 降序
for k, v in sorted(d.items(), key=lambda kv: kv[1], reverse=True):
print(k, v)
items() 視圖是字典遍歷的核心入口,理解其動態特性與集合運算能力,能寫出更高效、更 Pythonic 的代碼。