我的代码是这样的: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))]
这避免了构建密钥列表的成本。