11

Pythonで辞書のキーとしてUnicode文字を使用することは可能ですか?キーとして使用したUnicodeのキリル文字があります。キーで値を取得しようとすると、次のトレースバックが取得されます。

 Traceback (most recent call last):
 File "baseCreator.py", line 66, in <module>
    createStoresTable()
 File "baseCreator.py", line 54, in createStoresTable
    region_id = regions[region]
 KeyError: u'\u041c\u0438\u043d\u0441\u043a/\u041c\u043e\u0441\u043a\u043e\u0432\u0441\u043a\u0438\u0439\xa0'
4

2 に答える 2

8

はい、可能です。取得しているエラーは、使用しているキーが辞書に存在しないことを意味します。

デバッグprintするには、辞書を試してみてください。各キーのreprが表示され、実際のキーがどのように見えるかが示されます。

于 2012-07-27T19:56:18.217 に答える
3

Python 2.xは、キーがすでに存在するかどうかをテストしたり、値にアクセスしたり、値を上書きしたりする目的で2つのキーを比較するときに、両方のキーをバイト文字列に変換します。キーはUnicodeとして保存できますが、2つの異なるUnicode文字列が同じバイト文字列に縮小された場合、両方をキーとして使用することはできません。

In []: d = {'a': 1, u'a': 2}
In []: d
Out[]: {'a': 2}

ある意味で、Unicodeキーを使用できます。

UnicodeキーはUnicodeで保持されます。

In []: d2 = {u'a': 1}
In []: d2
Out[]: {u'a': 1}

既存のキーと「等しい」任意のUnicode文字列またはバイト文字列を使用して値にアクセスできます。

In []: d2[u'a']
Out[]: 1

In []: d2['a']
Out[]: 1

キーまたはキーと「等しい」ものを使用して新しい値を書き込むと、成功し、既存のキーが保持されます。

In []: d2['a'] = 5
In []: d2
Out[]: {u'a': 5}

'a'既存のキーとの比較はであったためTrue、その既存のUnicodeキーに対応する値はに置き換えられました5。私が与える最初の例u'a'では、のリテラルで提供される2番目のキーはd、以前に割り当てられたキーと正確に比較されるため、バイト文字列'a'はキーとして保持されますが、値は。で上書きされます2

于 2015-12-30T11:04:02.057 に答える