字典与unicode中的键

时间:2012-07-27 19:55:01

标签: 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 = regions[region]
 KeyError: u'\u041c\u0438\u043d\u0441\u043a/\u041c\u043e\u0441\u043a\u043e\u0432\u0441\u043a\u0438\u0439\xa0'

2 个答案:

答案 0 :(得分:7)

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

要进行调试,请尝试print字典;你会看到每个键的repr,它应该显示实际的键是什么样的。

答案 1 :(得分:2)

Python 2.x在比较两个密钥时将两个密钥转换为字节串,以便测试密钥是否已存在,访问值或覆盖值。密钥可以存储为Unicode,但如果两个不同的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'的文字中提供的第二个键d与先前分配的键进行了真实比较,因此字节串'a'被保留为键但值为用2覆盖。