2011-06-25 27 views
-1

私は関数を扱っています。 "source"が "d"にある場合、それは辞書オブジェクトの値に追加されます。そうでない場合は追加されます。例えば、この場合。 "a"は2回追加されますが、 "b"が1回追加されます。条件付き辞書の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で:

F:C - - >(B> A)

と同じ内容である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}}