当前位置: 首页 > 面试题库 >

如何纠正错误'AttributeError:'dict_keys'对象没有属性'remove''?

邢杰
2023-03-14
问题内容

我正在尝试使用dijkstra算法的最短路径查找器,但似乎不起作用。无法找出问题所在。这是代码和错误消息

graph = {
    'A': {'B': 10, 'D': 4, 'F': 10},
    'B': {'E': 5, 'J': 10, 'I': 17},
    'C': {'A': 4, 'D': 10, 'E': 16},
    'D': {'F': 12, 'G': 21},
    'E': {'G': 4},
    'F': {'E': 3},
    'G': {'J': 3},
    'H': {'G': 3, 'J': 3},
    'I': {},
    'J': {'I': 8},
}

def dijkstra(graph, start, end):
    D = {}
    P = {}
    for node in graph.keys():
        D[node]= -1
        P[node]=""
    D[start]=0
    unseen_nodes=graph.keys()
    while len(unseen_nodes) > 0:
        shortest=None
        node=' '
        for temp_node in unseen_nodes:
            if shortest==None:
                shortest = D[temp_node]
                node = temp_node
            elif D[temp_node]<shortest:
                    shortest=D[temp_node]
                    node=temp_node
        unseen_nodes.remove(node)
        for child_node, child_value in graph[node].items():
            if D[child_node] < D[node] + child_value:
                D[child_node] = D[node] + child_value
                P[child_node]=node
    path = []
    node = end
    while not (node==start):
        if path.count(node)==0:
            path.insert(0, node)
            node=P[node]
        else:
            break
    path.insert(0, start)
    return path

AttributeError:’dict_keys’对象没有属性’remove’


问题答案:

在Python
3中,dict.keys()返回没有方法的dict_keys对象(字典的视图)remove。与Python 2不同,Python 2dict.keys()返回一个列表对象。

>>> graph = {'a': []}
>>> keys = graph.keys()
>>> keys
dict_keys(['a'])
>>> keys.remove('a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'dict_keys' object has no attribute 'remove'

您可以list(..)用来获取密钥列表:

>>> keys = list(graph)
>>> keys
['a']
>>> keys.remove('a')
>>> keys
[]
unseen_nodes = graph.keys()

unseen_nodes = list(graph)


 类似资料:
  • 问题内容: 我想转换火花数据框架以使用以下代码添加: 详细的错误消息是: 有人知道我在这里做错了吗?谢谢! 问题答案: 您无法使用数据框,但可以将数据框转换为RDD并通过映射将其映射。在Spark 2.0之前,别名为。使用Spark 2.0,您必须先明确调用。

  • 问题内容: 我如何解决此错误,我是从GitHub下载此代码的。 引发错误 请帮我解决这个问题! 我用了: 我得到这个错误。有人帮我,我只想让它工作为什么这么难? 问题答案: 我怀疑您从中复制代码的地方启用了急切执行功能,即在程序开始时调用了该位置。 您也可以这样做。希望能有所帮助。 更新:请注意,默认情况下,TensorFlow 2.0中启用了急切执行。因此,以上答案仅适用于TensorFlow

  • 问题内容: 下面的代码给出了错误: 码: 问题答案: 从代码中,我可以看到你希望允许用户下载pdf。 现在开始 去 http://localhost:5000

  • 问题内容: 当我尝试时,会发生错误: 我找到了带有pyelasticsearch.py 的链接https://github.com/toastdriven/pyelasticsearch/blob/master/pyelasticsearch.py​​#L424-469,但我不知道它是哪个版本。无论如何,该代码中没有购买我的pyelasticsearch.py​​。任何人都有相同的经历吗?感谢您的

  • 我和cloud composer一起策划了两个数据流工作,它已经工作了一个月了。突然,这两个作业停止工作,并出现以下错误消息: 在作业中,我用存储客户端从google cloud storage下载一个文件。我以为这是因为一些依赖问题。在composer环境中,我安装了google-cloud-storage,但没有指定版本。我尝试指定包的不同版本,但似乎没有任何工作。 谢了!

  • 问题内容: 我正在使用Flask开发论坛模板。当我尝试使用表单在浏览器中创建新线程时,SQLAlchemy抛出AttributeError。当我尝试与论坛到线程实现一对多关系以及与线程到用户实现一对多关系时,出现了问题。 models.py 所有新的帖子/主题,并在views.py中处理 views.py 问题答案: 问题是这样的: 你要使用ORM对象,而不是主键列: 该错误表示整数被解释为ORM