不可散列类型:"dict_keys" - 适用于版本 2.7.5,但不适用于 3.4



我的代码是这样的:tmp1=tmp[tmp.keys()[0]]

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

这段代码在Python2.7版本中运行得非常完美但如果我在3.4版中运行同样的程序我得到了一个TypeError:不可更改的类型:"dict_keys"怎么会这样?如何在版本3.4中修复它?

替换:

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'

Python3默认使用视图对象访问dict,如果您更改底层字典,则视图对象会反映更改
对于您的情况,您可以简单地执行:

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

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

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

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

相关内容

最新更新