2017-02-14 4 views
1

ここでアイデアはありません。 私が持っている:他の2つの辞書(d1、d2)に固有の項目で構成される辞書(d3)を作成します。

d1 = {1:30, 2:20, 3:30, 5:80} 
d2 = {1:40, 2:50, 3:60, 4:70, 6:90} 

私が作成したいと思います:

d3 = {4:70, 5:80, 6:90} 

私は、これが故に、私のフラストレーションがどのように些細な実現しています。アイデアがあれば、共有してください。

+2

@mrkaran:あなたは説明していません。これは差異辞書です。 –

+0

@Willem Van Onsemああ、私はそれを実現しました! – mkaran

+2

@BillalBEGUERADJ:質問は、宿題をやりたい怠け者の学生か、本当の(そして特定の)問題を持つ人のように見えるかどうかによって異なります。いくつかの質問は、 "**タスク1 **:" ... –

答えて

2

対称的な差異^は、固有のキーを検出します。それでは簡単なディクテーションです:

>>> {k: d1.get(k, d2.get(k)) for k in (set(d1)^set(d2))} 
{4: 70, 5: 80, 6: 90} 

上記の方法は相互互換コードです。それはあなたがPythonの2に対処する必要がない場合は少し立派になります

>>> from collections import ChainMap 
>>> d12 = ChainMap(d1, d2) 
>>> {k: d12[k] for k in d1.keys()^d2.keys()} 
{4: 70, 5: 80, 6: 90} 

注:ここでは、キー「ビュー」オブジェクトはメソッドd.viewkeys()の下でも、Pythonの2でご利用いただけます。

+0

'set(d1)^ set(d2)'で2つの新しいセットを作るのではなく、 'd1.keys()^ d2.keys()'を使うこともできます。 –

+0

@ajcr、 'dict.keys'はPython 2.xでリストを返します。 'list^list'はサポートされていません。 – falsetru

+0

@wimあり​​がとう!これはまさに私が達成したかったものです –

1
def dictJoin(d1, d2): 
    return {k: d1[k] if k in d1 else d2[k] for k in set(d1)^set(d2)} 

d1 = {1:30, 2:20, 3:30, 5:80} 
d2 = {1:40, 2:50, 3:60, 4:70, 6:90} 

if __name__ == '__main__': 
    d3 = dictJoin(d1, d2) 
    print d3 
+0

これに辞書の理解を使用することができます。 –

+0

'dictJoin'は素晴らしい名前ではありませんが、そうでなければ良いアイデアです。 – wim

関連する問題