尝试将多个值附加到字典中的键时,Python中出现属性错误

2024-04-26 21:10:08 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我试着找出这个错误有一段时间了,我似乎不知道是什么问题。我想要的就是有一个字典,里面有可以与多个值关联的各种键。我一直收到这个错误:

Traceback (most recent call last):
File "C:/Users/.py", line 34, in insert_nodes
self.__graph_dict[value].append(node2)
AttributeError: 'Node' object has no attribute 'append'

我完全有可能忽略了一些小问题,或者只是对我应该如何处理这个问题感到困惑。 我的代码如下:

^{pr2}$

任何帮助都将不胜感激。在


Tags: inpymost字典错误linecallusers
2条回答

您可以按如下方式利用collections.defaultdict

from collections import defaultdict

(...)
    def __init__(self):
        self.graph_dict = defaultdict(list)

(...)
    def insert_nodes(self, value, neighbor):
        node1 = Node(value, colored="blank")
        node2 = Node(neighbor, colored="blank")
        # no need for the if
        self.graph_dict[value].append(node2)

另一个选项,以及在该场景中使用setdefault的正确方法之一是:

^{pr2}$

虽然我不喜欢它,但它是有效的和可读的,IMHO。我仍然觉得defaultdict方法更有吸引力。在

编辑:或者,或多或少等效,但查找次数较少:

(...)
def insert_nodes(self, value, neighbor):
    node1 = Node(value, colored="blank")
    node2 = Node(neighbor, colored="blank")
    self.graph_dict.setdefault(value, []).append(node2)

“与其请求允许,不如请求原谅”。。。或者类似的事情。它被认为更像Python,而且它确实更快,只要试着去做并抓住异常。在

考虑到@barny已经修复了这个bug,这与风格更为相关。但是,为了完整起见,我将其包括在内:

(...)
def insert_nodes(self, value, neighbor):
    node1 = Node(value, colored="blank")
    node2 = Node(neighbor, colored="blank")
    try:
        self.graph_dict[value].append(node2)
    catch KeyError:
        self.graph_dict[value] = [node2]

Append-graph不是dict-list的内容。这是因为当你初始化它时,你给它一个值,而不是一个列表。 更改:

if value in self.graph_dict:
    self.graph_dict.setdefault(value, [])
    self.graph_dict[value].append(node2)
else:
    self.graph_dict[value] = node2

收件人:

^{pr2}$

相关问题 更多 >