Python强制dict条目为utf-8

我花了一个下午的大部分时间来尝试修补字典对象以utf-8编码代替unicode.我试图找到扩展词典对象的最快,性能最好的方法,并确保其条目,键和值均为utf-8.

这是我想出的,它可以完成工作,但是我想知道可以进行哪些改进.

class UTF8Dict(dict):
    def __init__(self, *args, **kwargs):
        d = dict(*args, **kwargs)
        d = _decode_dict(d)
        super(UTF8Dict,self).__init__(d)
    def __setitem__(self,key,value):
        if isinstance(key,unicode):
            key = key.encode('utf-8')
        if isinstance(value,unicode):
            value = value.encode('utf-8')
        return super(UTF8Dict,self).__setitem__(key,value)

def _decode_list(data):
    rv = []
    for item in data:
        if isinstance(item, unicode):
            item = item.encode('utf-8')
        elif isinstance(item, list):
            item = _decode_list(item)
        elif isinstance(item, dict):
            item = _decode_dict(item)
        rv.append(item)
    return rv

def _decode_dict(data):
    rv = {}
    for key, value in data.iteritems():
        if isinstance(key, unicode):
            key = key.encode('utf-8')
        if isinstance(value, unicode):
            value = value.encode('utf-8')
        elif isinstance(value, list):
            value = _decode_list(value)
        elif isinstance(value, dict):
            value = _decode_dict(value)
        rv[key] = value
    return rv

改善以下任何一项的建议将非常有帮助:

>表现
>涵盖更多的边缘情况
>错误处理

解决方法:

我同意那些可能会被误导的评论.也就是说,这是您当前方案中的一些漏洞:

> d.setdefault可用于将unicode对象添加到您的字典中:

>>> d = UTF8Dict()
>>> d.setdefault(u'x', u'y')

> d.update可用于将unicode对象添加到您的字典中:

>>> d = UTF8Dict()
>>> d.update({u'x': u'y'})

>可以使用任何标准列表操作将字典中包含的列表值修改为包括unicode对象.例如.:

>>> d = UTF8Dict(x=[])
>>> d['x'].append(u'x')

为什么要确保您的数据结构仅包含utf-8字符串?

上一篇:Python 字典(Dictionary) update()方法


下一篇:C#-保持我的列表/词典可全局访问