Pythonの辞書(dict)は、キー(Key)と値(Value)のペアを格納するデータ構造です。しかし、キーに日本語を設定すると、KeyErrorに直面することがあります。これは、utf-8では「ど」などの濁点・半濁点のつく文字には以下の二通りの表現方法があるためです。
- 単純に「ど」
- 「と」+「濁点」
これらは見た目上は同じ文字ですが、utf-8で表示すると違うことがわかります。Pythonのdictはこの違いも判別しているため、KeyErrorが発生してしまうことがあります。
print(b'\\xe3\\x81\\xa9'.decode('utf-8')) # ど
print(b'\\xe3\\x81\\xa8\\xe3\\x82\\x99'.decode('utf-8')) # ど
print(b'\\xe3\\x81\\xa8'.decode('utf-8')) # と
この問題を解決するためには、unicodedata.normalize
関数を使用して、文字列を正規化することができます。
import unicodedata
KeyMatched_str = unicodedata.normalize('NKFC', KeyError_str)
これにより、日本語のキーを持つ辞書を安全に扱うことができます。この情報がPythonで日本語のキーを持つ辞書を扱う際の参考になれば幸いです。