dict_key对象不支持索引-python 3

4 投票
2 回答
6366 浏览
提问于 2025-05-01 01:43

我遇到了一个错误,提示“dict_key对象不支持索引”,出现在:

return len(G[G.keys()[0]])

我发现这个在python 2.7.x中是可以工作的,但在python 3中就不行了。我应该怎么改这个语句才能在python 3中正常运行呢?

暂无标签

2 个回答

1

在Python 3中,使用keysvaluesitems得到的对象是字典视图对象,这些对象不支持索引操作,也就是说你不能像访问列表那样通过位置来获取它们的元素。

你可以试试这样做:

len(next(iter(G.values())))

这段代码获取字典的值的视图对象,然后得到一个迭代器,从这个迭代器中取出第一个元素(也就是字典中的第一个值),最后返回这个值的长度。

与其他方法不同,这些方法会创建一个新的list来存放键或值,而这个方法无论字典有多大,所需的时间大致是一样的。

这个方法在Python 2和Python 3中都能用(不过在Python 2中,为了效率,你需要使用itervaluesviewvalues)。

6

在Python 2.x版本中,G.keys()会返回一个列表,但在Python 3.x版本中,它返回的是一个dict_keys对象。解决这个问题的方法是用list()G.keys()包裹起来,这样就可以把它转换成正确的类型:

return len(G[list(G.keys())[0]])

撰写回答