私は午後の大部分を、ユニコードの代わりにutf-8でエンコードされるように辞書オブジェクトにパッチを当てようとして過ごしました。辞書オブジェクトを拡張し、そのエントリ、キー、および値が両方とも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
次のいずれかを改善する提案は非常に役立ちます。
- パフォーマンス
- より多くのエッジケースをカバーする
- エラー処理