.items()
tinydict = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'}print (tinydict.items())
運行結果
dict_items([('Google', 'www.google.com'), ('Runoob', 'www.runoob.com'), ('taobao', 'www.taobao.com')])
返回的?dict_items([...])
?是一個字典項的視圖對象,它包含了字典中所有的(鍵,值)對。
dict_items
?是一個特殊的視圖對象,
如何正確理解和使用?dict.items()
?方法的示例:
tinydict = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'} # 打印字典項的視圖對象
print(tinydict.items())
# 輸出: dict_items([('Google', 'www.google.com'), ('Runoob', 'www.runoob.com'), ('taobao', 'www.taobao.com')]) # 如果你想遍歷這些鍵值對,可以這樣做:
for key, value in tinydict.items(): print(key, value)
# 輸出:
# Google www.google.com
# Runoob www.runoob.com
# taobao www.taobao.com
視圖對象中() 和[]的意義
在Python中,當你看到類似于dict_items([...])
這樣的輸出時,這里的()
和[]
并不代表傳統意義上的元組(tuple)或列表(list),而是用來表示這是一個視圖對象(view object)的上下文或格式。不過,這里實際上有一個小小的誤導,因為dict_items
通常不會直接顯示為dict_items([])
,特別是當字典不為空時。
視圖對象
在Python的字典(dict
)中,.items()
,?.keys()
, 和?.values()
?方法都返回視圖對象,而不是列表、元組或其他容器類型。這些視圖對象提供了字典內容的動態視圖,意味著它們反映了字典的當前狀態,并且任何對字典的非就地(non-in-place)修改都會反映在視圖對象上。但是,視圖對象本身并不支持索引操作(如使用[]
),盡管它們看起來有點像是可迭代的列表或元組。
() 和 [] 在這里的含義
-
()
:在dict_items(...)
中,()
并不表示這是一個元組。這里的()
更多是用于格式化或描述性的目的,表明dict_items
后面跟著的是一個動態的、可迭代的對象,而不是一個具體的值或容器。然而,實際上你并不會在dict_items
的輸出中看到()
,除非是在某種特定的字符串表示或文檔描述中。 -
[]
:在描述或嘗試表示一個空的視圖對象時,可能會看到dict_items([])
這樣的表述,但這實際上是不準確的。因為dict_items
對象并不是列表,即使它們看起來像是一個空的列表表示([]
)。當字典為空時,更準確的表示應該是類似于dict_items([])
的文本(盡管這仍然不是標準輸出),但實際上你看到的更可能是沒有包含任何元素的dict_items
對象的表示,它可能只是簡單地顯示為一個空的視圖對象,而不包含任何[]
。
正確的理解
- 當你調用
d.items()
時,你應該理解為一個動態的、可迭代的對象被返回了,它包含了字典d
中所有的(鍵,值)對。 - 你可以使用這個對象來遍歷字典中的鍵值對,但不能像操作列表或元組那樣對其進行索引或切片。
- 視圖對象反映了字典的當前狀態,任何對字典的非就地修改都會立即反映在這些視圖對象上。
示例
my_dict = {'a': 1, 'b': 2}
items_view = my_dict.items() # 遍歷視圖對象
for key, value in items_view: print(key, value) # 刪除字典中的一個項
del my_dict['a'] # 再次遍歷視圖對象(注意:這里的items_view仍然有效,因為它反映了字典的當前狀態)
for key, value in items_view: print(key, value) # 輸出將不包括已刪除的項
在這個例子中,items_view
是一個視圖對象,它動態地反映了my_dict
的內容。當你從字典中刪除一個項時,這個變化也會反映在視圖對象中。