关于图表的分配有问题

时间:2016-01-10 19:07:43

标签: python

所以基本上我们有一些文本文件包含' pickle'格式化词典字典。一个例子就是:

{'1': {'3': 3, '2': 5, '4': 8},
'3': {'5': 4, '6': 8},
'2': {'3': 3, '4': 2},
'5': {'4': 4, '6': 3},
'4': {'3': 4, '6': 2},
'7': {'4': 5},
'6': {}}

现在这实际上代表一个图形,主字典的键(1到7)是该图的节点,并且这些节点/键中的每一个都包含另一个字典作为值,并且在该字典中,键表示节点原始节点有一个弧,每个键后面都有一个距离(所以如果我们看一下主词典中的键' 1,我们看到它有节点3,2和4的弧,带有分别为距离3,5和8)。对不起,如果这令人困惑。

基本上,我需要编写4个函数:

IsArc(graph, n1, n2)
Answers the question: Does graph contain an arc from n1 to n2 ?

LenArc(graph, n1, n2)
Answers the question: What is the length of the arc from n1 to n2 ?
Returns 1000000 if there is no arc from n1 to n2 in graph.

NodeSet(graph)
Returns the set of all nodes in graph.

PrintSet(s)
Prints the elements of set s in lexicographical (alphabetical) order. 

这就是我现在所拥有的:

def IsArc(graph, n1, n2):  
    return graph[n1].has_key('n2')

LenArc(graph, n1, n2):  
    if IsArc(graph, n1, n2)==True:  
        return graph[n1][n2]  
    else:  
        return inf

def NodeSet(graph):  
    setlist=[]  
    for k, v in graph.iteritems():  
        setlist.append(k)  
    setnode=set(setlist)  
    return setnode

def PrintSet(s):  
    listset=[]  
    for nodes in s:  
        listset.append(nodes)  
    listalpha=listset.sort()  
    output=""  
    for i in range(0, n):  
        output+= listalpha[i]  
    print output

但是,IsArc对我来说似乎总是return 'False',因此LenArc总是返回1000000,因为它依赖于IsArc来提供正确的值。 另外,我希望PrintSet(s)打印任何给定集合的元素,如下所示:

{element1, element 2, element 3, ..... , lastelement }

但我不确定如何做到这一点。唯一可行的功能似乎是NodeSet(graph)

BTW我的python版本是2.7.11

1 个答案:

答案 0 :(得分:1)

错误在于您正在寻找名为'n2'的密钥:

def IsArc(graph, n1, n2):  
    return graph[n1].has_key('n2')

何时应查找名为n2的密钥:

def IsArc(graph, n1, n2):  
    return graph[n1].has_key(str(n2))

另外,请考虑按如下方式简化NodeSet:

def NodeSet(graph):
    return set(graph.keys())