dict_key对象不支持索引-python 3
我遇到了一个错误,提示“dict_key对象不支持索引”,出现在:
return len(G[G.keys()[0]])
我发现这个在python 2.7.x中是可以工作的,但在python 3中就不行了。我应该怎么改这个语句才能在python 3中正常运行呢?
2 个回答
1
在Python 3中,使用keys
、values
和items
得到的对象是字典视图对象,这些对象不支持索引操作,也就是说你不能像访问列表那样通过位置来获取它们的元素。
你可以试试这样做:
len(next(iter(G.values())))
这段代码获取字典的值的视图对象,然后得到一个迭代器,从这个迭代器中取出第一个元素(也就是字典中的第一个值),最后返回这个值的长度。
与其他方法不同,这些方法会创建一个新的list
来存放键或值,而这个方法无论字典有多大,所需的时间大致是一样的。
这个方法在Python 2和Python 3中都能用(不过在Python 2中,为了效率,你需要使用itervalues
或viewvalues
)。
6
在Python 2.x版本中,G.keys()
会返回一个列表,但在Python 3.x版本中,它返回的是一个dict_keys
对象。解决这个问题的方法是用list()
把G.keys()
包裹起来,这样就可以把它转换成正确的类型:
return len(G[list(G.keys())[0]])