在python
2.7中,我们获得了可用的字典视图方法。
现在,我知道以下各项的优缺点:
dict.items()
(和values
,keys
):返回一个列表,因此您可以实际存储结果,并且dict.iteritems()
(等等):返回一个生成器,因此您可以逐个迭代生成的每个值。 有什么用dict.viewitems()
(等等)?他们有什么好处?它是如何工作的?到底是什么看法?
我读到该视图始终反映字典中的变化。但是,从性能和内存的角度来看,它的表现如何?优点和缺点是什么?
字典视图本质上就是它们的名字所说的: 视图就像 是字典的键和值(或项)上的 窗口 。这是Python
3官方文档的摘录:
>>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500}
>>> keys = dishes.keys()
>>> values = dishes.values()
>>> # view objects are dynamic and reflect dict changes
>>> del dishes['eggs']
>>> keys # No eggs anymore!
dict_keys(['sausage', 'bacon', 'spam'])
>>> values # No eggs value (2) anymore!
dict_values([1, 1, 500])
(Python 2等效项使用dishes.viewkeys()
和dishes.viewvalues()
。)
此示例显示了 视图 的 动态特性 :按键视图 不是
给定时间点的按键副本,而是一个简单的窗口,向您显示按键;如果它们被更改,那么您在窗口中看到的内容也会更改。此功能在某些情况下很有用(例如,可以在程序的多个部分中使用键的视图,而不必每次都需要重新计算当前键列表)—请注意,如果修改了字典键在视图上进行迭代时,迭代器的行为方式未明确定义,这可能会导致错误。
一个优点是,例如, 查看 键仅 使用少量且固定的内存, 并且需要 少量且固定的处理器时间 ,因为不创建键列表(另一方面,Python
2,通常会不必要地创建一个新列表,如Rajendran
T所引用的那样,该列表占用的内存和时间与列表的长度成比例。要继续进行窗口类比,如果您想查看墙后的风景,只需在其中开一个洞(您就可以创建一个窗口);将关键帧复制到列表中将相当于在墙上绘制风景的副本-
该副本需要时间,空间并且不会自我更新。
概括来说,视图只是…词典上的视图(窗口),即使词典发生更改,视图也仍会显示它们的内容。它们提供的功能与列表不同:键的列表包含给定时间点的字典键的 副本
,而视图是动态的,并且获取起来要快得多,因为它无需复制任何数据(键或值)以进行创建。
主要内容:视图的优点MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的。 数据库中只存放了视图的定义,并没有存放视图中的数据,这些数据都存放在定义视图查询所引用的真实表中。使用视图查询数据时,数据库会从真实表中取出对应的数据。因此,视图中的数据是依赖于真实表中的数据的。一旦真实表中
问题内容: 在使用Guava集合并阅读其文档时,我已经阅读了几次“术语 视图” 。 我一直在寻找一种解释,说明在这种情况下视图是什么以及它是否在Guava之外使用。在这里经常使用。番石榴的这种类型在其名称中具有 视图 。 我的猜测是,一个集合的视图是另一个具有相同数据但结构不同的集合。例如,当我将条目从a添加到后者时,将是前者的视图。那是对的吗? 有人可以给我链接到一个公认的 view 定义(如果
本文向大家介绍什么叫视图?游标是什么?相关面试题,主要包含被问及什么叫视图?游标是什么?时的应答技巧和注意事项,需要的朋友参考一下 答:视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。 游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特
问题内容: 如果我想将的结果(即对象)与需要字典或类映射对象的方法一起使用(请参见collections.Mapping),那么正确的方法是什么? “进入”对象并使用其属性是否合适? 我认为答案是否定的:闻起来像执行公约,而不是一个接口,方式或或似乎是。 问题答案: 您可以使用 vars() 访问名称空间的字典: 您可以根据需要直接修改字典: 是的,可以访问__dict__属性。这是定义明确,经过
问题内容: 我知道映射是将键映射到值的数据结构。字典不一样吗?地图和字典1有什么区别? 1.我不是要问用X或Y语言定义它们(这似乎是人们通常在SO上要求的语言),我想知道它们在理论上有何不同。 问题答案: 同一件事的两个术语: Java,C ++使用“地图” .Net,Python使用“字典” PHP使用“关联数组” “映射”是正确的数学术语,但是避免使用它,因为它在函数式编程中具有单独的含义。
问题内容: 我最近回答了这个问题,如何依次按顺序调用用户定义的功能与选择组一起使用 我的答案是使用内联视图执行该功能,然后对它进行分组。 在评论中,提问者不理解我的回答,并要求提供一些网站/参考资料以帮助解释它。 我已经做了一个快速的谷歌,还没有找到任何详尽的资源来详细解释什么是内联视图以及它们在哪里有用。 有没有人可以帮助解释什么是内联视图? 问题答案: 从这里开始:内联视图是另一个SELECT
有一个问题,为什么他们要求在字典中使用不可变对象作为键。 当我最近使用字典(显然不是为了哈希表)将Xml节点对象作为键放置时,这个问题实际上进入了我的脑海。然后,我在使用过程中多次更新节点。 那么,“使用不可变键”到底意味着什么呢?
问题内容: 每当我学习垃圾收集器时,都会听到术语“对象图”。到底是什么意思? 问题答案: 对象具有对其他对象的引用,这些对象又可以具有对更多对象(包括起始对象)的引用。这将创建对象图,在可及性分析中很有用。例如,如果起始对象是可到达的(例如,它在线程的本地堆栈中),则图形中的所有对象都是可到达的,并且确切的垃圾收集器无法收集任何这些对象。同样,如果我们创建所有可到达对象的列表,则从一组活动对象(根