问题标签 [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.
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
首先,视图与迭代器有何不同?其次,这种变化有什么好处?仅仅是出于性能原因吗?
这对我来说似乎并不直观,即,我要一份东西清单(把你所有的钥匙给我),然后我又得到了别的东西。这会让人们感到困惑吗?
python - python3:带有“+”操作数的字典的总和(并集)引发异常
我想避免使用 update() 方法,并且我读到可以使用“+”操作数将两个字典合并到第三个字典中,但是在我的 shell 中发生的是:
我怎样才能让它工作?
python - Python 3 上的 dict.keys()[0]
我有这句话:
但是当我调用它时,会弹出这个错误:
是版本问题吗?我正在使用 Python 3.3.2
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}
.
这种行为不一致的真正原因是什么?
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 中的查找成本更高吗?您能解释一下原因吗?
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()
的键/值来访问一个索引?(我使用非常大的字典)
这个问题是关于性能的。不是关于如何去做。重复的标志是不相关的。
python - Python 2.7 视图、for/in 和修改是否可以很好地协同工作?
Python 文档给出了有关在迭代字典时尝试修改字典的警告。这适用于视图吗?
我理解视图是“实时的”,因为如果您更改底层字典,视图会自动反映更改。我也知道如果添加或删除元素,字典的自然顺序可能会改变。这如何与 for/in 结合使用?您可以安全地修改 dict 而不会弄乱循环吗?
for/in 循环是否也遍历所有新元素?它是否遗漏了元素(因为订单更改)?
python - 将列表与 dictviews 进行比较
字典视图“是类似集合的对象”,因此可用于将字典内容与其他对象进行比较。具体来说,
- key-views : 类似集合
- value-views : 不像集合
- item-views:如果(键,值)对是唯一且可散列的,则类似于集合
键视图的类集合性质允许按位比较。在 Python 3 中,我们可以使用&
运算符找到交集。
奇怪的是,比较 alist
和 key-view 也是可能的:
而list
和set
对象通常不能以这种方式进行比较。
除了类似于集合之外,为什么键视图可以与使用位运算符的列表进行比较?
测试于:|Python 3.5.2|Python 3.4.4|Python 2.7.12(使用viewkeys()
)|IPython 5.0.0|
python - Python:理解字典视图对象
.items()
我一直在尝试理解 Python 3 中由, .values()
,.keys()
或类似地由.viewitems()
, .viewvalues()
, .返回的内置视图对象.viewkeys()
。关于该主题还有其他线程,但似乎没有一个(甚至doc )描述了它们在内部的工作方式。
与 Python 2 中返回的类型副本相比,这里的主要收获似乎是有效的list
。经常将其比作字典项目的窗口(如在这个线程中)。
但是那个窗口是什么,为什么它更有效?
我唯一能看到的是视图对象似乎是 类似集合的对象,这对于成员资格测试通常更快。但这是唯一的因素吗?
代码示例
所以,我的问题是关于这dict_items
门课的。这在内部如何运作?
python - 为什么类似集合的对象不支持像 .intersection() 这样的集合方法?
在 Python 3.7 中,我想计算两个字典键的交集。为此,我想.intersection()
在他们的 上调用该方法keys()
,但是它不起作用。
.keys() 产生一个类似集合的对象,但是大多数集合方法都不能处理它。然而,有效的是类集合对象的极其未知的按位运算符重载,例如&
.
我发现&
类似集合的对象上的重载极少使用,并且大多数程序员都不知道。.intersection()
类似or的方法名称.union()
是自记录的,并且根据这个定义肯定更 Pythonic。
那为什么不支持呢?甚至文档也列出了别名之类的&
和.intersection()
方法,更不用说仅&
在类似集合的对象上受支持。
注意:出于某种原因,在 IPython 中,自动完成列表.isdisjoin()
作为一种方法在dict.keys()
. 在 17 种方法中,存在 1 种。