问题标签 [dictview]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
48 浏览

python - 为什么 dict 与 dict.keys() 联合返回一个集合?

正如我最初预期的那样, adict和 a的并集set给出TypeError

然而,令人惊讶的是, a和的dict并集dict.keys()返回 a set

set.union(dict)也有这种行为:

set | dict没有,并且行为就像dict | set

这里发生了什么?为什么在某些情况下允许使用 dict 和 set 的并集,但在其他情况下不允许,为什么在允许的情况下返回一组键?

0 投票
2 回答
214 浏览

python - 为什么 .values() 和 .keys() 被认为是 O(1)?

无法找到足够可靠的理由来解释为什么.values().keys()等字典函数在大 O 表示法中被认为是O(1) 。(不确定.items()是否也被认为是 O(1) )

0 投票
1 回答
196 浏览

python - 为什么 set 运算符适用于 dict_key 视图对象而不适用于等效的 set 方法?

编辑:可能重复。只有在发布此问题并查看“相关问题”之后,我才能找到为什么在类似集合的对象上不支持像 .intersection() 这样的集合方法?,这个问题可能足够相似,可以重复。

我试图查看字典中的键是否是集合的子集,并且遇到了dict_keys视图对象和集合方法/运算符的一些令人困惑的行为。

集合和视图之间的区别指出:

只有 dict.keys() 字典视图始终是一个集合(它的行为类似于一个集合,但具有字典的实时视图)

https://docs.python.org/3/library/stdtypes.html#dictionary-view-objects文档指出

键视图类似于集合,因为它们的条目是唯一且可散列的。... 对于类似集合的视图,为抽象基类 collections.abc.Set 定义的所有操作都可用(例如,==、< 或 ^)。

并且https://docs.python.org/2/library/stdtypes.html#set设置类型文档意味着运算符(<=、| 等)等同于方法.issubset()union()

然而,以下代码并未反映这些断言:

s.issuperset(dic.keys())但是确实返回True

当所有迹象都表明 .issubset() 方法可以工作时,为什么会出现分散行为?