Python unicode键字典

Python unicode键字典,python,unicode,Python,Unicode,在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

在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'
回溯(最近一次呼叫最后一次):
文件“baseCreator.py”,第66行,在
createStoresTable()
createStoresTable中第54行的文件“baseCreator.py”
region_id=区域[区域]
关键错误:u'\u041c\u0438\u043d\u0441\u043a/\u041c\u043e\u0441\u043a\u043e\u0432\u0441\u043a\u0438\u0439\xa0'

是的,这是可能的。您得到的错误意味着您正在使用的密钥在您的字典中不存在


若要调试,请尝试使用字典进行打印;您将看到每个键的repr,它应该显示实际键的外观。

Python 2.x在比较两个键时将两个键转换为bytestring,以测试键是否已存在、访问值或覆盖值。一个键可以存储为Unicode,但是如果两个不同的Unicode字符串减少为相同的ByTestRing,则它们不能同时用作键

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字符串或bytestring访问该值:

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

In []: d2['a']
Out[]: 1
In []: d2['a'] = 5
In []: d2
Out[]: {u'a': 5}
使用键或任何与键“相等”的键写入新值将成功并保留现有键:

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
。在我给出的初始示例中,为
d
提供的文本中的第二个键
u'a'
真实地与先前分配的键进行比较,因此bytestring
'a'
保留为键,但值被
2
覆盖

当我用同一个“字符串”的不同编码版本创建和查询一些字典时,我遇到了类似的问题。这是需要寻找的东西。有用的方法有
str.encode
str.decode
字符串方法。当然,有可能字典中根本不存在密钥,因此与密钥的实际编码无关。python 3.2中的unicode密钥可能存在问题。您是如何解决这个问题的?我在3.4.2中有同样的问题。我已经打印了密钥,并且密钥已经存在,并且仍然得到上面报告的错误。请更新吗?