辞書のキーと値を入れ替える(2)
例えば、辞書Dに対して以下のようにキーと値を入れ替えられる。
dict(zip(D.values(), D))
但し、これには以下の2つのことに注意する必要がある。
- unhashableな値はキーになれない
- 重複した値は違うキーになれない
この2つの事柄はdictに関する基本である。これを回避する方法を考えたが、すぐには思いつかなかった。つまり、上記のキーと値を入れ替えるやり方は、制限が付いていることを意識しておく必要がある。
例えば、globals()やlocals()は、「変数名 => 変数の値」という辞書になっている。しかし、変数の値としてリストのようなunhashableなオブジェクトもあり得るし、変数の値も重複することがあり得る。なので、キーと値を入れ替えるやり方では、変数の値から変数名を得ることは難しい。
あと、zip(D, D.values())は、D.items()と仕様上きちんと内容が同じになっているかも気になったが、今度調べてみるつもり。