Python含Unicode键的字典值访问失败问题排查与解决
解决Unicode键字典访问问题 & 嵌套字典的正确操作
嘿,我来帮你理清楚这个问题,其实核心问题和你后来发现的一样——是嵌套字典的结构没注意到,不过也顺便聊聊Unicode键的处理,避免以后踩坑:
一、先搞定你的核心需求:嵌套字典的正确访问
你最后试的方法是对的!因为你要访问的是嵌套字典里的值,之前没注意到层级结构。如果目标值是直接在顶层键下,那用:
accessValueName = dictionaryName.get('keyName')
要是keyName对应的本身还是个字典,就得链式访问,比如要取内层的innerKey:
# 假设字典结构是 {u'keyName': {u'innerKey': u'innerValue'}} innerValue = dictionaryName.get('keyName', {}).get('innerKey')
加个{}当默认值,就算keyName不存在也不会抛KeyError,更安全。
二、关于Unicode键的误区你可能没搞清楚
在Python 2里,内容相同的普通字符串'keyName'和Unicode字符串u'keyName'是等价的字典键,也就是说你一开始用get('keyName')其实应该能拿到值,除非键的实际内容有差异(比如藏了隐形字符、大小写写错了)。
如果确实需要把整个字典的Unicode键(还有Unicode值)都转成普通字符串,给你个递归处理的方法,能搞定嵌套的字典和列表:
def unicode_to_str(obj): if isinstance(obj, dict): return {str(k): unicode_to_str(v) for k, v in obj.items()} elif isinstance(obj, list): return [unicode_to_str(i) for i in obj] elif isinstance(obj, unicode): return str(obj) else: return obj # 调用后得到全是普通字符串的字典 str_based_dict = unicode_to_str(dictionaryName)
三、以后排查这类问题的小技巧
要是再遇到键找不到的情况,先打印字典的所有键看看实际内容:
print(dictionaryName.keys())
这样能直接看到键的类型和具体内容,不会再误以为是编码问题,其实是拼写或结构错了。
内容的提问来源于stack exchange,提问作者user5454232
相关产品推荐
相关产品推荐

