【问题标题】:dict.keys() returning dict_keys class - view object expecteddict.keys() 返回 dict_keys 类 - 期望查看对象
【发布时间】:2014-01-09 13:16:29
【问题描述】:

我在 Python 2.7.3 和 Python 3.2.3 中运行以下代码:

test_dict = {'foo':'bar'}
type(test_dict.keys())

在 Python 2 中,输出为:

<type 'list'>

在 Python 3 中:

<class 'dict_keys'>

然而 Python 3 文档指出 keys 方法应该返回一个 view object,那么为什么要返回一个类呢?

【问题讨论】:

  • 我不明白这个问题。 keys 不返回一个类,它返回一个类的实例。我认为type的用法存在一些误解。相比之下,type(1) 返回&lt;class 'int'&gt;,1 也不是一个类。
  • 我觉得你说得对,我不懂类型
  • dict_keys 是一个字典视图类型。这样的类型不止一种。 test_dict.values() 将返回一个 dict_values 实例,test_dict.items() 返回一个 dict_items 实例。

标签: python-3.x dictionary


【解决方案1】:

keys() 在 Python 2 中返回一个列表,这很好 - 对于小型字典,但对于大型字典,这需要时间。所以在 Python 3 中,它现在是一个可迭代的视图对象。这个视图对象实际上是一种叫做dict_keys的类。

keys() 上调用type() 会返回该项目的对象类型,这就是为什么在Python2 中它是list,而在Python 3 中它是dict_keys

【讨论】:

    【解决方案2】:

    keys 返回了一个视图。是 type 返回了一个类:

    v this part doesn't return a view
    type(test_dict.keys())
                   ^this part returns a view
    

    &lt;class 'dict_keys'&gt;test_dict.keys() 返回的视图对象的类型。如果您想要视图本身,请不要致电type

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-08
      • 2018-10-14
      • 2016-07-13
      • 1970-01-01
      • 2018-08-12
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      相关资源
      最近更新 更多