gpt4 book ai didi

python - 字典 View 对象与集合

转载 作者:行者123 更新时间:2023-12-04 08:58:13 25 4
gpt4 key购买 nike

我一直在阅读这些由 dict.keys() 之类返回的字典 View 对象。 ,包括此处有关该主题的帖子。我知道它们充当字典内容的窗口,而不显式存储所述内容的副本,因此比动态更新键列表更有效。我还发现它们是容器(允许使用 in 运算符)但是是 不是 序列(不可索引),尽管它们 可迭代的。
总的来说,这对我来说听起来像是 set ,因为他们可以访问字典的哈希表,他们甚至提供使用 set - 像交集/差异这样的操作。我能想到的一个区别是 set ,虽然像这些 View 对象一样可变,但只能存储不可变(因此是可散列的)对象。
然而,由于字典值不一定是不可变的,valuesitems View 对象本质上是 set s 具有可变内容,预计 不是 支持 set - 类似操作(减法/交集)。这让我怀疑将这些 View 对象视为“一个 set 并引用了字典”。
我的问题是:这些 View 对象是否与集合完全不同但碰巧具有相似的属性?或者它们是使用集合实现的?两者之间还有其他主要区别吗?最重要的是 - 将它们视为“基本上 set s”是否有害?

最佳答案

您比较的隐含点是 dict.keys()set元素不能有重复项。但是,从键中获得的类似集合的 Dictionary View 仍然保留顺序,而集合则没有。
重复的字典键:

If a key occurs more than once, the last value for that key becomes the corresponding value in the new dictionary.


重复的集合元素:

A set object is an unordered collection of distinct hashable objects.


从上面, set s 是无序的,而在当前 Python 版本的字典中保持插入顺序:

Changed in version 3.7: Dictionary order is guaranteed to be insertion order.


因为字典有插入顺序,所以它们可以颠倒,而集合中的这种操作是没有意义的:

Dictionaries and dictionary views are reversible.


最后,一个 set可以更改、删除和插入。 Dictionary View 对象只允许查看内容,而不能更改它们。

My question is, are these view objects entirely different to sets but happen to have similar properties? Or are they implemented using sets?


该文档对实现细节没有任何要求。

Any other major differences between the two?


文档说明了“键 View ”和“项目 View ”或“值 View ”之间的区别。

Keys views are set-like (...)

If all values are hashable, so that (key, value) pairs are unique and hashable, then the items view is also set-like.

(Values views are not treated as set-like (...))

关于python - 字典 View 对象与集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63702336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com