2011-06-25 226 views
-1

我正在开发一个函数。如果在“d”中找到“source”,那么它将被添加到它的字典对象的值中,否则将被添加。例如在这种情况下。 “a”加两次,但“b”加一次。Python条件字典词典

我想获得输出如下(最后一行)

谢谢。

def adder(source,dest,weight): 
    """""" 


if __name__ == "__main__": 
    d = {} #dictionary 
    adder('a','b',1) 
    adder('a','f',4) 
    adder('b','c',1) 
    adder('f','g',3) 

    print d 

    {'a':{'b':1,'f':4}, 'b':{'c':1}, 'f':{'g':3},g:{},c:{}} #<----final o/p needed 
+0

有什么问题吗?代码中包含 – trutheality

+0

问题。 –

回答

1

下面的实现应该这样做:

def adder(dict, source, dest, weight): 
    if not source in dict: 
    dict[source] = {} 
    if not dest in dict: 
    dict[dest] = {} 
    dict[source][dest] = weight 

请注意,我说dict作为第一个参数的方法。

+0

谢谢霍华德。你的代码非常优雅,适合我。 –

2

字典词典只是一个元组字典。您可以实现加法器是这样的:

#The dictionary we will be adding to 
d = {} 

def adder(source, dest, weight): 
    d[(source, dest)] = weight 

高眉头原因是,与任何产品类别,坎(C,坎(B,A))是自然同构于坎(C X B,A )。或在功能语言,

FⅧ:C - >(B - > A)

相同:

FⅧ:C X B - >甲

而且巧合的是,它也是为什么(A^B)^ C = A ^(B * C)。

+3

+1我想有人不得不用类别理论对这个问题进行分类。 – trutheality

0

你可以使用一个简单的,如果条件:

In [9]: def adder(d,source,dest,weight): 
    ...:  if source in d: 
    ...:   d[source][dest] = weight 
    ...:  else: 
    ...:   d[source] = {dest: weight} 
    ...: 

In [10]: d={} 

In [11]: adder(d, 'a', 'b', 1) 

In [12]: adder(d, 'a', 'f', 4) 

In [13]: adder(d, 'b', 'c', 1) 

In [14]: d 
Out[14]: {'a': {'b': 1, 'f': 4}, 'b': {'c': 1}}