簡體   English   中英

字典視圖對象與集合

[英]Dictionary view objects vs sets

我一直在閱讀有關dict.keys()之類返回的這些字典視圖對象的信息,包括此處有關該主題的帖子。 我知道它們充當字典內容的 windows 而無需顯式存儲所述內容的副本,因此比動態更新鍵列表更有效。 我還發現它們是容器(允許使用in運算符)但不是序列(不可索引),盡管它們可迭代的。

總的來說,這聽起來像一個set ,因為他們可以訪問字典的 hash 表,他們甚至提供使用類似set的操作,如交集/差異。 我能想到的一個區別是set雖然像這些視圖對象一樣可變,但只能存儲不可變(因此可散列)的對象。

但是,由於字典不一定是不可變的,因此valuesitems視圖對象本質上是具有可變內容的set ,預計支持類似set的操作(減法/交集)。 這讓我懷疑是否將這些視圖對象視為“引用字典的set ”。

我的問題是:這些視圖對象是否與集合完全不同但碰巧具有相似的屬性? 或者它們是使用集合實現的嗎? 兩者之間還有其他主要區別嗎? 最重要的是——將它們視為“基本set s”是否有害?

比較的隱含點是dict.keys()set元素不能重復。 但是,從鍵獲得的類似集合的字典視圖仍然保留順序,而集合則沒有。

重復的字典鍵:

如果某個鍵出現多次,則該鍵的最后一個值將成為新字典中的對應值。

重復集合元素:

集合 object 是不同的可散列對象的無序集合。

從上面可以看出, set是無序的,而在當前 Python 版本字典中保持插入順序:

在 3.7 版更改:字典順序保證是插入順序。

因為字典有插入順序,所以它們可以顛倒,而集合中的這種操作是沒有意義的:

字典和字典視圖是可逆的。

最后,可以更改、刪除和插入set 字典視圖 object 只允許查看內容,不能更改它們。

我的問題是,這些視圖對象是否與集合完全不同但恰好具有相似的屬性? 或者它們是使用集合實現的嗎?

該文檔未對實施細節作出任何聲明。

兩者之間還有其他主要區別嗎?

文檔 state“鍵視圖”和“項目視圖”或“值視圖”之間的區別。

按鍵視圖類似於設置 (...)

如果所有值都是可散列的,那么 (key, value) 對是唯一且可散列的,那么項目視圖也是類似集合的。

值視圖不被視為集合(...))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM