1

重複の可能性:
Python では、辞書を並べ替えて反復処理するにはどうすればよいですか?

辞書の助けが必要です。2 つの辞書があり、これら 2 つの辞書に同一のキーの値を追加したいと考えています。同じキーを持つ値を合計したリストを作成する必要があります。私はリストを作成しましたが、それらのキーが 2 つの辞書の唯一のものである値は、すべての計算が終了した後に追加されます。つまり、次のとおりです。

dectionary1= {8: 2, 0: 6, 2: 5, 3: 34}  
dectionary2= {8: 6, 1: 2, 3: 2}

私のリストは次のとおりです。

summing= [6, 2, 5, 36, 8]

0 を取り、dectionary 2 に 0 があるかどうかをチェックしてから、1 を取り (NOT 2)、dectionary 1 にあるかどうかをチェックして、リストを並べ替えます。

私はこれまでにこれを得ました:

summing=[8, 6, 5, 36, 2]

ここでは、最初にキー (0) ではなく (8) を取ります!! 順調であってほしい。

私のコードを見るには、これまでに得たもの:

dic1= {8: 2, 0: 6, 2: 5, 3: 34}  
dic2= {8: 6, 1: 2, 3: 2}
p=[]
for x in dic1:
    if x in dic2:
        g=dic1[x]+dic2[x]
        p=p+[g]
    else:
        p=p+[dic1[x]]
for m in dic2:
    if m in dic1:
        p=p
    else:
        p=p+[dic2[m]]

辞書を昇順に並べることができれば、はるかに簡単になると思いますが、どうすればよいでしょうか。

私のpythonはWing IDE 3.2です

ありがとうございました

4

1 に答える 1

8

ここには 2 つのオプションがありますcollections.OrderedDict()

[dic1.get(x, 0)+dic2.get(x, 0)for x in sorted(dic1.keys() | dic2.keys())]

最初に辞書のいずれかで任意のキーのセットを作成し、これを正しい順序で並べ替えてから、リスト内包表記でループし、2 つの値(値がまだ存在しない場合は 0 ) を追加します。

>>> dic1= {8: 2, 0: 6, 2: 5, 3: 34}  
>>> dic2= {8: 6, 1: 2, 3: 2}
>>> [dic1.get(x, 0)+dic2.get(x, 0)for x in sorted(dic1.keys() | dic2.keys())]
[6, 2, 5, 36, 8]

これは、セットのような辞書ビューをdict.keys()返す3.x でのみ機能することに注意してください。これを python 2.7.x で実行したい場合は、代わりにそれより前に使用するのが最適です。dict.viewkeys()set(dict.iterkeys())

于 2012-04-30T15:45:09.920 に答える