不可用的类型:' dict_keys' -work in ver。 2.7.5但不是3.4

时间:2015-02-12 01:54:31

标签: python typeerror

我正在编写类似这样的代码:     tmp1=tmp[tmp.keys()[0]]

其中:tmp={'Freud':{3,6,9},'Sigmund':{6}} # a dictionary

这段代码在Python ver中完美运行。 2.7 但是如果我在ver中运行相同的话。 3.4 我得到了一个TypeError:unhashable类型:' dict_keys' 怎么会? 我怎样才能在ver中修复它。 3.4

2 个答案:

答案 0 :(得分:3)

替换:

tmp1=tmp[tmp.keys()[0]]

使用:

tmp1=tmp[list(tmp.keys())[0]]

讨论

在python3中,与python2相反,keys返回一个可迭代的类集视图对象,而不是列表。例如:

>>> tmp.keys()[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'dict_keys' object does not support indexing

可是:

>>> list(tmp.keys())[0]
'Freud'

答案 1 :(得分:2)

Python3默认使用视图对象访问dicts,如果更改基础字典,则视图对象会反映更改。
对于您的情况,您可以这样做:

tmp1 = tmp[list(tmp)[0]]

然而,这可能非常昂贵。如果您需要的只是字典中的任何元素,那么您可以这样做:

tmp1 = tmp[next(iter(tmp))]

避免了构建密钥列表的成本。