2017-11-15 8 views
-5

値が一致する場合、2つの辞書のキーを差し引きたいと思います。一つの辞書は、ここで結果が値が一致すれば辞書からキーを減算し、Pythonの差を返します

result 
(1, 0, 0, 0, 0, 0, 0, 0, 0, 0) 

基本的価値38は、この例では(2,2)からのキーを変更する必要があります。この

dict_one 
{(2, 2): 38, 
(2, 6): 51, 
(4, 9): 29, 
(5, 1): 53, 
(6, 6): 91, 
(6, 9): 105, 
(7, 6): 66, 
(8, 4): 74, 
(8, 8): 89, 
(9, 6): 115} 

例では、この

dict_two 
{(2, 1): 38, 
(2, 6): 51, 
(4, 9): 29, 
(5, 1): 53, 
(6, 6): 91, 
(6, 9): 105, 
(7, 6): 66, 
(8, 4): 74, 
(8, 8): 89, 
(9, 6): 115 

のような他のように見えます(2,1)。したがって、これらの値のペアの差は1ですが、他のすべてのキーは2つの辞書の間で同じままであるため、他のキーの出力値はすべて0です。

+2

辞書には順序がありません。予想される出力順序、ソートされたキーは何ですか? –

+2

辞書には順序がないので、おそらくあなたに合った順序で鍵を生成する方法があります。もしそうなら、解決策は明らかです! –

+1

* value *でマッチングしている場合、間違った方法で辞書にマッピングされているように見えます。値がuiqueの場合は、辞書を逆順にして、各キーのタプル内の2番目の値を単に減算します。 –

答えて

2

キーを探している場合は、キー値マッピングの順序が間違っているようです。辞書の1つを反転するので、指定された値に対して対応するタプルを簡単に検索できます。

はその後以上のループが他のキーと値のペアをソート:

inverted_dict_one = {v: k for k, v in dict_one.items()} 
result = [abs(k[1] - inverted_dict_one[v][1] for k, v in sorted(dict_two.items())] 

デモ:

>>> inverted_dict_one = {v: k for k, v in dict_one.items()} 
>>> [abs(k[1] - inverted_dict_one[v][1]) for k, v in sorted(dict_two.items())] 
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
関連する問題