Python 2.7 属性错误:';dict';对象在迭代集合字典时没有属性(…)

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

我试图从一个由其邻接列表表示的无向图中删除一个节点,但收到了一个我无法理解的错误

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: 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