Python 2.7 属性错误:';dict';对象在迭代集合字典时没有属性(…)
我试图从一个由其邻接列表表示的无向图中删除一个节点,但收到了一个我无法理解的错误 ugraph的示例:Python 2.7 属性错误:';dict';对象在迭代集合字典时没有属性(…),python-2.7,graph,pycharm,attributeerror,Python 2.7,Graph,Pycharm,Attributeerror,我试图从一个由其邻接列表表示的无向图中删除一个节点,但收到了一个我无法理解的错误 ugraph的示例: g1 = {0: set([1]), 1: set([0, 2]), 2: set([1, 3]), 3: set([2]), 4: {5, 6}, 5: {4}, 6: {}} 我正在创建的函数: def remove_node(ugraph, node): """ :param ugraph: An undirected graph :param node: Th
g1 = {0: set([1]), 1: set([0, 2]), 2: set([1, 3]), 3: set([2]), 4: {5, 6}, 5: {4}, 6: {}}
我正在创建的函数:
def remove_node(ugraph, node):
"""
:param ugraph: An undirected graph
:param node: The node that we want to remove
:return: The undirected graph minus one node :)
"""
try:
del ugraph[node]
except KeyError:
print "The node is not in the graph"
for key in ugraph.keys():
ugraph[key] = ugraph[key].difference(set([node]))
return ugraph
这是我的错误:
Traceback (most recent call last):
File "/home/juan/PycharmProjects/AlgorithmicThinking_week2/resilence.py", line 46, in <module>
print remove_node(g1, 1)
File "/home/juan/PycharmProjects/AlgorithmicThinking_week2/resilence.py", line 42, in remove_node
ugraph[key] = ugraph[key].difference(set([node]))
AttributeError: 'dict' object has no attribute 'difference'
回溯(最近一次呼叫最后一次):
文件“/home/juan/PycharmProjects/AlgorithmicThinking_week2/resilence.py”,第46行,in
打印删除节点(g1,1)
文件“/home/juan/PycharmProjects/AlgorithmicThinking_week2/resilence.py”,第42行,在remove_节点中
ugraph[key]=ugraph[key]。差异(集合([node]))
AttributeError:“dict”对象没有属性“difference”
为什么会发生这种情况?其中一件事情与另一件不同:
>>> g1 = {0: set([1]), 1: set([0, 2]), 2: set([1, 3]), 3: set([2]), 4: {5, 6}, 5: {4}, 6: {}}
>>> for key in g1:
... print key, g1[key], type(g1[key])
...
0 set([1]) <type 'set'>
1 set([0, 2]) <type 'set'>
2 set([1, 3]) <type 'set'>
3 set([2]) <type 'set'>
4 set([5, 6]) <type 'set'>
5 set([4]) <type 'set'>
6 {} <type 'dict'>
g1={0:set([1]),1:set([0,2]),2:set([1,3]),3:set([2]),4:{5,6},5:{4},6:{}
>>>对于g1中的键:
... 打印键,g1[键],类型(g1[键])
...
0集([1])
1套([0,2])
2套([1,3])
3套([2])
4套([5,6])
5套([4])
6 {}
{}
是一个空的dict,而不是空集。改用set()
。打印问题用于自动完成。请再次查看我的帖子,错误消息正是它所说的:upgraph
是一个标准的Python对象,dict对象没有像difference
那样的属性(或方法)。为什么您认为需要在upgraph
上调用.difference
?如果它是这样记录的,那么会有一些奇怪的事情发生。查看实际的g1
对象,我可能会发现问题:前几个元素的值类型为set
,它们确实有一个difference
属性。但是带有键6的元素有一个值,它是一个(空)dict,而不是一个set。我不是在ugraph上调用difference
,而是在我注意到的ugraph的值上调用;DSM和Rahul发现了我在同一时间发现的相同问题。你是对的,但我不明白为什么在某些地方我可以使用set literal{}
,但在其他地方我需要使用set函数调用set([])
,因为在存在set literal之前,{}
被用来引用空字典。(我希望空的dict是{:}
,但现在没办法了。)所以我们一直坚持将{}
作为空字典,将{1}
作为一个集合。谢谢,我的函数还可以。正如你所说,问题出在g1