为了账号安全,请及时绑定邮箱和手机立即绑定

奇怪的错误消息:“dict_keys”对象没有属性“pop”

奇怪的错误消息:“dict_keys”对象没有属性“pop”

慕少森 2023-03-22 14:06:22
我尝试在 jupyter 笔记本(python 版本 - 3.7.6)上运行的代码有一个奇怪的问题此链接中的代码 ( https://towardsdatascience.com/to-all-data-scientists-the-one-graph-algorithm-you-need-to-know-59178dbb1ec2 ) 由于 python 而有点过时它所写的版本。我将“.iteritems”更改为“.items”并且在这部分之前效果很好:graph = Graph(g)graph.add_edge(("Mumbai", "Delhi"),400)graph.add_edge(("Delhi", "Kolkata"),500)graph.add_edge(("Kolkata", "Bangalore"),600)graph.add_edge(("TX", "NY"),1200)graph.add_edge(("ALB", "NY"),800)g = graph.adj_mat()def bfs_connected_components(graph):    connected_components = []    nodes = graph.keys()    while len(nodes)!=0:        start_node = nodes.pop()        queue = [start_node] #FIFO        visited = [start_node]        while len(queue)!=0:            start = queue[0]            queue.remove(start)            neighbours = graph[start]            for neighbour,_ in neighbours.items():                if neighbour not in visited:                    queue.append(neighbour)                    visited.append(neighbour)                    nodes.remove(neighbour)        connected_components.append(visited)    return connected_componentsprint bfs_connected_components(g)它给了我这个错误File "<ipython-input-48-660b0e10e666>", line 32 print bfs_connected_components(g) ^ SyntaxError: invalid syntax所以我试着起飞print,只是bfs_connected_components(g)为了找到调试器会返回给我的东西。当我在没有命令的情况下运行代码时,print它会返回以下错误:AttributeError                            Traceback (most recent call last)<ipython-input-49-09c142e436e3> in <module>     30     return connected_components     31 ---> 32 bfs_connected_components(g)<ipython-input-49-09c142e436e3> in bfs_connected_components(graph)     14      15     while len(nodes)!=0:---> 16         start_node = nodes.pop()     17         queue = [start_node] #FIFO     18         visited = [start_node]AttributeError: 'dict_keys' object has no attribute 'pop'这很奇怪,因为此链接中的先前代码中有.pop命令,并且它运行良好,没有任何错误,除了表达式.iteritems。
查看完整描述

1 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

与您提到的其他问题一样(例如 中缺少括号print,以及 iteritems 的项目发生变化),这是一个 Python 版本问题。在 Python 3 中,pop 对 dict_keys 不起作用。

要解决此问题,您可以将其列为一个列表。在您的代码中,执行nodes = list(graph.keys()).


查看完整回答
反对 回复 2023-03-22
  • 1 回答
  • 0 关注
  • 152 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信