2011-06-25 225 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}}