2017-11-15 25 views
1

私はユニークな値を持つ辞書を持っており、それを逆にしたい(つまり、値を持つスワップキー)inplaceです。 別の辞書を使用せずにこれを行う方法はありますか?辞書をインプレースに置き換える

id(my_dict)が同じままであるように、新しい辞書を使用するよりも、辞書内の項目を操作する方が好きです。

+1

Pythonの「dict」は順序付けられていません。あなたはそれを逆転させることによって何を意味するのか説明する必要があります。 – Drop

+0

また、「インプレース」はどのように機能すると思いますか?古い辞書変数に新しい辞書を割り当てることは大丈夫ですか、または辞書内の項目を操作したいですか? – Drop

+0

私はちょうどdictの中の項目を操作し、新しい辞書を使わないほうがいいので、id(dict)は同じままです。 – Kinor

答えて

2

あなたはこのようにそれを行うことができます

dictionary = {value: key for key, value in dictionary.items()} 
:あなたはむしろ代わりに、辞書の理解の構文を使用する場合は、この行を書くことができ

dictionary = dict(map(reversed, dictionary.items())) 

:コードの

あなたが辞書のitems方法を使用しない場合、避けることが比較的容易である:

dictionary = {dictionary[key]: key for key in dictionary} 

あなたが辞書のコピーを作成する余裕があれば、必要であれば、あなたの場所でそれを逆にすることができます:

def reverse_in_place(dictionary): 
    reference = dictionary.copy() 
    dictionary.clear() 
    dictionary.update(map(reversed, reference.items())) 
+0

これらはすべて、「別の辞書を使用せずに」違反する新しい辞書を作成します。私はキーと値を入れ替えることがインプレースでどうやって行なわれるのか、実際は分かりません。 @NogaKinorはおそらくそれが答える前に質問を詳しく述べるべきです。 – Drop

+0

私はおそらく 'reference = list(dictionary.items())'をやっていますが、私はちょうど最後のものが好きです。 –

+0

@NoctisSkytower最後のものは、私が望んでいたのと同じように動作します。ありがとう! – Kinor

0

私はキーとdictの値を交換したいと思いますか?あなたがキーと値を交換すると、キーの競合を作成し、重複する値を気にしないしようとしている場合、あなたは、単一の行ではなく、簡単に辞書を「逆転」することができます

dict_name = dict(zip(dict_name.values(), dict_name.keys())) 
関連する問題