오후에 유니 코드 대신 UTF-8로 사전 객체를 패치하는 데 더 많은 시간을 보냈습니다. 사전 객체를 확장하고 항목, 키 및 값이 모두 utf-8인지 확인하는 가장 빠르고 최상의 수행 방법을 찾으려고합니다.파이썬 강제 dict 엔트리가 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
제안은 매우 도움이 될 것입니다 :
- 성능
- 커버 더 에지의 경우
- 오류 처리 나는 의견에 동의
왜이 작업을 수행하고 있습니까? 키/값을 유니 코드 오브젝트로 저장 한 다음 필요에 따라 인코딩하십시오. 확장 프로그램에서 가장 필요한 것은 isinstance 검사로 실패 할 경우 예외를 발생시킵니다. – Marcin
모범 사례는 코드의 입력 및 출력 가장자리에서 인코딩 및 디코딩 (송신 즉시 가능한 한 디코드, 가능한 한 늦게 인코딩)을하고 유니 코드로 유지합니다. –
왜 아무것도 강요합니까? 사전을 만들고 올바른 인코딩으로 키/값을 추가하기 만하면됩니다. 유형과 인코딩을 강제하는 것은 Pythonic이 아닙니다. –