重複の可能性:
Python の逆/逆マッピング
次があるとします。
D = {'a':1,'b':2,'c':3}
どのように各要素を逆にするのでしょうか
inverseD = {1:'a',2:'b',3'c'}
重複の可能性:
Python の逆/逆マッピング
次があるとします。
D = {'a':1,'b':2,'c':3}
どのように各要素を逆にするのでしょうか
inverseD = {1:'a',2:'b',3'c'}
dict 内包表記を使用します (Python2.7+
および3.0+
):
D = {'a':1,'b':2,'c':3}
inverse = {v: k for k, v in D.items()}
print(inverse)
# {1: 'a', 2: 'b', 3: 'c'}
Python 2.6以前(dictの理解なし)の場合:
d = {'a':1,'b':2,'c':3}
inverse_dict = dict((v,k) for k,v in d.items())
これは、dictの値がハッシュ可能であることを前提としています。d
たとえば、このディクショナリでは機能しません。
>>> d={'l':[],'d':{},'t':()}
>>> inverse_dict = dict((v,k) for k,v in d.items())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
また、元のdictの値が一意でない場合、問題が発生します。
>>> d={'a': 1, 'c': 3, 'b': 2, 'd': 1}
>>> dict((v,k) for k,v in d.items())
{1: 'd', 2: 'b', 3: 'c'}
Python2.7 +を使用している場合は、mataの回答を使用できます。それ以外の場合は、mhawkeの回答を使用してください。
このようなdictの反転は、ソースdictのすべての値が一意でハッシュ可能である場合にのみ適切に機能します
値がハッシュ可能であるが一意ではない場合は、代わりに値のリストを使用してdictを作成できます