2016-11-13 18 views
-1

私は、キーを繰り返したりオリジナルを修正したりすることなく、2つの辞書(データベースと呼ばれます)を結合しようとしています。私は近いと思うが、私は現在、 'db1'が関数のパラメータの1つであっても定義されていないというエラーが出ています。ここで私はあなたがキーを見ることができるようにキーを繰り返さずに辞書をマージする

{'Pablo Picasso' : [('Guernica', 1937, 349.0, 776.0, 'oil paint', 'Spain')], 
'Leonardo da Vinci': [('Mona Lisa', 1503, 76.8, 53.0, 'oil paint', 'France'), 
         ("Portrait of Isabella d'Este", 1499, 63.0, 46.0, 'chalk', 'France'), 
         ('The Last Supper', 1495, 460.0, 880.0, 'tempera', 'Italy')]} 

を合併

{'Leonardo da Vinci': [('Mona Lisa', 1503, 76.8, 53.0, 'oil paint', 'France'), 
         ('The Last Supper', 1495, 460.0, 880.0, 'tempera', 'Italy')]} 

D2

{'Pablo Picasso'  : [('Guernica', 1937, 349.0, 776.0, 'oil paint', 'Spain')], 
'Leonardo da Vinci' : [("Portrait of Isabella d'Este", 1499, 63.0, 46.0, 'chalk', 'France'), 
         ('The Last Supper', 1495, 460.0, 880.0, 'tempera', 'Italy')]} 

合併

D1のように見えるためにそれらを必要なものを2つの辞書の一例であり、 "Leonardo da Vinci"は両方のディクショナリに表示されますが、マージされた辞書には一度しか表示されません。助けることができる誰にも感謝します。ここに私の現在のコードは次のとおりです。

def merge_databases (db1,db2): 
    ds = [db1, db2] 
    d = {} 
    for k in db1.iterkeys(): 
     d[k] = tuple(d[k] for d in ds) 
+1

画像を使用しないでください。テキストを貼り付けるので、回答者は手伝ってみるときに再入力する必要がありません。 –

+0

画像ではっきりとわかりますが、今すぐ入力します – n00bprogrammer22

+0

元の出力とコードを適切にインデントして貼り付けてください。入力する必要はなく、エラーの可能性も低くなります。 –

答えて

1

私は何が必要だと思う:

def merge_databases(db1, db2): 
    d = {} 
    for key in db1.keys() | db2.keys(): 
     d[key] = db1.get(key, []) + db2.get(key, [])  
    return d 

かさえ:

def merge_databases(db1, db2): 
    return {key: db1.get(key, []) + db2.get(key, []) 
      for key in db1.keys() | db2.keys()} 
+0

これは本当にうまく動作しますありがとうございます – n00bprogrammer22

+0

@ n00bprogrammer22少し簡単な解決策 –

関連する問題