1

重複の可能性:
Python の逆/逆マッピング

次があるとします。

D = {'a':1,'b':2,'c':3}

どのように各要素を逆にするのでしょうか

inverseD = {1:'a',2:'b',3'c'}
4

3 に答える 3

7

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'}
于 2012-05-24T01:05:46.657 に答える
3

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'}
于 2012-05-24T01:07:54.057 に答える
3

Python2.7 +を使用している場合は、mataの回答を使用できます。それ以外の場合は、mhawkeの回答を使用してください。

このようなdictの反転は、ソースdictのすべての値が一意でハッシュ可能である場合にのみ適切に機能します

値がハッシュ可能であるが一意ではない場合は、代わりに値のリストを使用してdictを作成できます

于 2012-05-24T01:12:22.913 に答える