2016-10-02 17 views
1

ここで達成しようとしているのは、2つの辞書を取り、両方の辞書の値を同じ「スポット」にとり、関数を適用できるようにすることです。ここではいくつかの擬似コードの例です:2つの辞書とランダム関数の比較

If f(a, b) returns a + b 
d1 = {1:30, 2:20, 3:30, 5:80} 
d2 = {1:40, 2:50, 3:60, 4:70, 6:90} 
then function(d1, d2) returns ({1: 70, 2: 70, 3: 90}, {4: 70, 5: 80, 6: 90}) 
If f(a, b) returns a > b 
d1 = {1:30, 2:20, 3:30} 
d2 = {1:40, 2:50, 3:60} 
then function(d1, d2) returns ({1: False, 2: False, 3: False}, {}) 
+1

違いからキーでのみ辞書のキーの値を返し、その後、D1、D2のマージされた辞書を見つけ、二組の最終的な結果を得るために

[FAQ](http://stackoverflow.com/tour)と[How to Ask](http://stackoverflow.com/help/how-to-ask)をご確認ください。 –

+0

この記事を見てくださいhttp://stackoverflow.com/questions/10461531/merge-and-sum-of-two-dictionaries – AlvaroP

+0

私は、値を比較した後に値を返す関数を設定する方法がわかりません2つの辞書。あなたはforループを使用しなければなりませんし、使用後にreturn関数を使用する必要がありますか?そして、私は質問をしないことをお詫びします、私はこれに新しいです。 – Alex

答えて

0

あなたが望むものを達成するために、多分、より効率的な方法があるが、私は次の関数を作成するための情報hereを使用:

def f1(a,b): 
    return a+b 

def f2(a,b): 
    return a>b 

def function2(d1,d2): 
    out1 = {} 
    out2 = {} 
    #use the set operations to take the common keys 
    commons = set(set(d1) & set(d2)) 
    for i in commons: 
     out1[i] = d1[i] > d2[i] 
    #all the non-common keys go to out2 
    for i in d1: 
     if i not in commons: 
      out2[i] = d1[i] 
    for i in d2: 
     if i not in commons: 
      out2[i] = d2[i] 
    return (out1,out2) 

def function1(d1,d2): 
    out1 = {} 
    out2 = {} 
    #use the set operations to take the common keys 
    commons = set(set(d1) & set(d2)) 
    for i in commons: out1[i] = f1(d1[i],d2[i]) 
    #all the non-common keys go to out2 
    for i in d1: 
     if i not in commons: 
      out2[i] = d1[i] 
    for i in d2: 
     if i not in commons: 
      out2[i] = d2[i] 
    return (out1,out2) 

def main(): 

    d1 = {1:30, 2:20, 3:30, 5:80} 
    d2 = {1:40, 2:50, 3:60, 4:70, 6:90} 
    d1,d2 = function1(d1,d2) 
    for i in d1:print(i,d1[i]) 
    print('\n') 
    for i in d2:print(i,d2[i]) 

    print('\n\n') 

    d1 = {1:30, 2:20, 3:30} 
    d2 = {1:40, 2:50, 3:60} 
    d1,d2 = function2(d1,d2) 
    for i in d1:print(i,d1[i]) 
    print('\n') 
    for i in d2:print(i,d2[i]) 



if __name__ == '__main__': 
    main() 

私が作ってみました私のコードは可能な限り明確です。私が助けてくれることを願っています。

0

まず交点をタプル の最初の項目のために使用される (集合として)差がタプルの2番目の項目のために使用されている交差点と2つの辞書の組合を見つけます。

ファンクタは、交差値のキーを持つ辞書項目に対して実行する操作です。これは最初のタプル項目で使用される最終結果です。あなたの質問は正確には何ですか?

def func(d1, d2, functor): 
    s_intersection = set(d1) & set(d2) 
    s_difference = set(d1)^set(d2) 
    merged = d1.copy() 
    merged.update(d2) 
    return {k: functor(d1[k], d2[k]) for k in s_intersection}, {k: merged[k] for k in s_difference} 

d1 = {1:30, 2:20, 3:30, 5:80} 
d2 = {1:40, 2:50, 3:60, 4:70, 6:90} 
print func(d1, d2, lambda x, y: x+y) 

d1 = {1:30, 2:20, 3:30} 
d2 = {1:40, 2:50, 3:60} 
print func(d1, d2, lambda x, y: x>y) 
関連する問題