2011-10-20 21 views
6

Pythonで辞書を逆変換する効率的な方法を知りたいと思います。私はまた、比較することができると仮定して、キーを比較し、より大きなものをより小さく選択することによって重複値を取り除きたい。ここで辞書を反転されています。ここではPythonの逆辞書

inverted = dict([[v,k] for k,v in d.items()]) 

答えて

8

最大のキーを使用して重複を削除するには、辞書イテレータを値でソートします。辞書への呼び出しは、最後のキーが挿入された使用します。

import operator 
inverted = dict((v,k) for k,v in sorted(d.iteritems(), key=operator.itemgetter(1))) 
0

は辞書を反転し、任意の重複する値の大きい方を保つためのシンプルかつ直接的な実装です:

inverted = {} 
for k, v in d.iteritems(): 
    if v in inverted: 
     inverted[v] = max(inverted[v], k) 
    else: 
     inverted[v] = k 

これは締めアップすることができますビットをとdict.get()

inverted = {} 
for k, v in d.iteritems(): 
    inverted[v] = max(inverted.get(v, k), k) 

このコードは少ない比較を行い、ソートを用いたアプローチよりも少ないメモリを使用

+7

「私も、キーを比較し、それらが比較できると仮定すると小さい上で大きなを選択することで、重複した値を取り除きたいです。」 – agf