辞書のキーと値を入れ替える(2)

例えば、辞書Dに対して以下のようにキーと値を入れ替えられる。

dict(zip(D.values(), D))


但し、これには以下の2つのことに注意する必要がある。

  • unhashableな値はキーになれない
  • 重複した値は違うキーになれない

この2つの事柄はdictに関する基本である。これを回避する方法を考えたが、すぐには思いつかなかった。つまり、上記のキーと値を入れ替えるやり方は、制限が付いていることを意識しておく必要がある。


例えば、globals()やlocals()は、「変数名 => 変数の値」という辞書になっている。しかし、変数の値としてリストのようなunhashableなオブジェクトもあり得るし、変数の値も重複することがあり得る。なので、キーと値を入れ替えるやり方では、変数の値から変数名を得ることは難しい。


あと、zip(D, D.values())は、D.items()と仕様上きちんと内容が同じになっているかも気になったが、今度調べてみるつもり。