问题标签 [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 投票
3 回答
3560 浏览

python-3.x - Python 3.0 - dict 方法返回视图 - 为什么?

dict 方法 dict.keys()、dict.items() 和 dict.values() 返回“视图”而不是列表。 http://docs.python.org/dev/3.0/whatsnew//3.0.html

首先,视图与迭代器有何不同?其次,这种变化有什么好处?仅仅是出于性能原因吗?

这对我来说似乎并不直观,即,我要一份东西清单(把你所有的钥匙给我),然后我又得到了别的东西。这会让人们感到困惑吗?

0 投票
2 回答
3274 浏览

python - python3:带有“+”操作数的字典的总和(并集)引发异常

我想避免使用 update() 方法,并且我读到可以使用“+”操作数将两个字典合并到第三个字典中,但是在我的 shell 中发生的是:

我怎样才能让它工作?

0 投票
3 回答
52566 浏览

python - Python 3 上的 dict.keys()[0]

我有这句话:

但是当我调用它时,会弹出这个错误:

是版本问题吗?我正在使用 Python 3.3.2

0 投票
4 回答
1543 浏览

python - dict.items 和 dict.values 之间的行为不一致

注意: python3 中的代码示例,但问题也代表 python2(替换.keys.viewkeys等)

dict对象提供(有时)支持集合操作的视图方法:

但是值视图不支持集合运算符:

我知道一个 dict 值可以是一个不可散列的对象,因此并不总是可以创建一组值,但是对于 也是如此dict.items,并且这里的集合操作只会在运行时失败,因为.items一旦存在不可散列输入 dict,而 set 操作.values立即失败。

文档提到Values 视图不被视为 set-like 因为条目通常不是 unique,但这似乎不是一个令人信服的理由 - 例如,python 不会阻止您创建像{0, 0, 1, 2}.

这种行为不一致的真正原因是什么?

0 投票
1 回答
1664 浏览

python - Python 2.7 与 3.4 上的字典查找

如果您需要对值应用一些测试,这出现在关于迭代字典键的首选样式的挑剔讨论中。我正在比较[k for k in d if d[k] == 1]反对的表现[k for k, v in d.items() if v == 1]

看起来字典查找在 Python 3.4 中更昂贵:

与 2.7 相比,Python 3.4 中的查找成本更高吗?您能解释一下原因吗?

0 投票
0 回答
67 浏览

python - dict_key 和 dict_value 列出表演

使用 python 2.x 我们可以这样做:

使用 python 3.x,.keys()返回dict_key.values()返回dict_value。我猜这些视图对象比 python 2.x 中的直接列表渲染性能最高(比如生成器?)。

但是,要通过索引访问字典键/字典值,我们必须使用 list():

有没有办法通过索引 (0, 1, [...] 999] 访问它们而不需要完整list()的键/值来访问一个索引?(我使用非常大的字典)

这个问题是关于性能的。不是关于如何去做。重复的标志是不相关的。

0 投票
1 回答
84 浏览

python - Python 2.7 视图、for/in 和修改是否可以很好地协同工作?

Python 文档给出了有关在迭代字典时尝试修改字典的警告。这适用于视图吗?

我理解视图是“实时的”,因为如果您更改底层字典,视图会自动反映更改。我也知道如果添加或删除元素,字典的自然顺序可能会改变。这如何与 for/in 结合使用?您可以安全地修改 dict 而不会弄乱循环吗?

for/in 循环是否也遍历所有新元素?它是否遗漏了元素(因为订单更改)?

0 投票
1 回答
99 浏览

python - 将列表与 dictviews 进行比较

字典视图“是类似集合的对象”,因此可用于将字典内容与其他对象进行比较。具体来说,

  • key-views : 类似集合
  • value-views : 不像集合
  • item-views:如果(键,值)对是唯一且可散列的,则类似于集合

键视图的类集合性质允许按位比较。在 Python 3 中,我们可以使用&运算符找到交集。

奇怪的是,比较 alist和 key-view 也是可能的:

listset对象通常不能以这种方式进行比较。

除了类似于集合之外,为什么键视图可以与使用位运算符的列表进行比较?


测试于:|Python 3.5.2|Python 3.4.4|Python 2.7.12(使用viewkeys())|IPython 5.0.0|

0 投票
2 回答
4811 浏览

python - Python:理解字典视图对象

.items()我一直在尝试理解 Python 3 中由, .values(),.keys()或类似地由.viewitems(), .viewvalues(), .返回的内置视图对象.viewkeys()。关于该主题还有其他线程,但似乎没有一个(甚至doc )描述了它们在内部的工作方式。

与 Python 2 中返回的类型副本相比,这里的主要收获似乎是有效的list。经常将其比作字典项目的窗口(如在这个线程中)。

但是那个窗口是什么,为什么它更有效?

我唯一能看到的是视图对象似乎是 类似集合的对象,这对于成员资格测试通常更快。但这是唯一的因素吗?

代码示例

所以,我的问题是关于这dict_items门课的。这在内部如何运作?

0 投票
2 回答
210 浏览

python - 为什么类似集合的对象不支持像 .intersection() 这样的集合方法?

在 Python 3.7 中,我想计算两个字典键的交集。为此,我想.intersection()在他们的 上调用该方法keys(),但是它不起作用。

.keys() 产生一个类似集合的对象,但是大多数集合方法都不能处理它。然而,有效的是类集合对象的极其未知的按位运算符重载,例如&.

我发现&类似集合的对象上的重载极少使用,并且大多数程序员都不知道。.intersection()类似or的方法名称.union()是自记录的,并且根据这个定义肯定更 Pythonic。

那为什么不支持呢?甚至文档也列出了别名之类的&.intersection()方法,更不用说仅&在类似集合的对象上受支持。

注意:出于某种原因,在 IPython 中,自动完成列表.isdisjoin()作为一种方法在dict.keys(). 在 17 种方法中,存在 1 种。