[PYTHON] dict의 키와 값을`unicode`에서`str`으로 변환하는 가장 빠른 방법은 무엇입니까?
PYTHONdict의 키와 값을`unicode`에서`str`으로 변환하는 가장 빠른 방법은 무엇입니까?
나는 하나의 "layer"코드에서 어떤 dict을 받고있다. 어떤 계산 / 수정은 다른 "layer"로 넘어 가기 전에 수행된다. 원래 dict의 키 및 "문자열"값은 유니 코드이지만 전달되는 레이어는 str 만 허용합니다.
이것은 자주 호출 될 것이므로 다음과 같이 변환하는 가장 빠른 방법이 무엇인지 알고 싶습니다.
{ u'spam': u'eggs', u'foo': True, u'bar': { u'baz': 97 } }
...에:
{ 'spam': 'eggs', 'foo': True, 'bar': { 'baz': 97 } }
... "문자열"이 아닌 값은 원래 형식으로 유지해야합니다.
이견있는 사람?
해결법
-
==============================
1.
DATA = { u'spam': u'eggs', u'foo': frozenset([u'Gah!']), u'bar': { u'baz': 97 }, u'list': [u'list', (True, u'Maybe'), set([u'and', u'a', u'set', 1])]} def convert(data): if isinstance(data, basestring): return str(data) elif isinstance(data, collections.Mapping): return dict(map(convert, data.iteritems())) elif isinstance(data, collections.Iterable): return type(data)(map(convert, data)) else: return data print DATA print convert(DATA) # Prints: # {u'list': [u'list', (True, u'Maybe'), set([u'and', u'a', u'set', 1])], u'foo': frozenset([u'Gah!']), u'bar': {u'baz': 97}, u'spam': u'eggs'} # {'bar': {'baz': 97}, 'foo': frozenset(['Gah!']), 'list': ['list', (True, 'Maybe'), set(['and', 'a', 'set', 1])], 'spam': 'eggs'}
가정 :
다른 컨테이너 유형을 지원해야하는 경우 패턴을 따라 가면서 패턴을 추가하는 것이 분명해지기를 바랍니다.
-
==============================
2.나는 이것이 늦었다는 것을 안다.
나는 이것이 늦었다는 것을 안다.
def convert_keys_to_string(dictionary): """Recursively converts dictionary keys to strings.""" if not isinstance(dictionary, dict): return dictionary return dict((str(k), convert_keys_to_string(v)) for k, v in dictionary.items())
-
==============================
3.이 작업을 인라인하고 재귀 적 강하가 필요하지 않은 경우 다음과 같이 작동 할 수 있습니다.
이 작업을 인라인하고 재귀 적 강하가 필요하지 않은 경우 다음과 같이 작동 할 수 있습니다.
DATA = { u'spam': u'eggs', u'foo': True, u'bar': { u'baz': 97 } } print DATA # "{ u'spam': u'eggs', u'foo': True, u'bar': { u'baz': 97 } }" STRING_DATA = dict([(str(k), v) for k, v in data.items()]) print STRING_DATA # "{ 'spam': 'eggs', 'foo': True, 'bar': { u'baz': 97 } }"
-
==============================
4.
def to_str(key, value): if isinstance(key, unicode): key = str(key) if isinstance(value, unicode): value = str(value) return key, value
키와 값을 전달하고 내부 사전을 설명하기 위해 코드에 재귀를 추가하십시오.
-
==============================
5.중첩되지 않은 dict의 경우 (제목에 해당 사례가 언급되지 않았기 때문에 다른 사람들에게 흥미로울 수 있음)
중첩되지 않은 dict의 경우 (제목에 해당 사례가 언급되지 않았기 때문에 다른 사람들에게 흥미로울 수 있음)
{str(k): str(v) for k, v in my_dict.items()}
-
==============================
6.모든 인라인 (비 재귀 적)으로 만들려면 다음을 수행하십시오.
모든 인라인 (비 재귀 적)으로 만들려면 다음을 수행하십시오.
{str(k):(str(v) if isinstance(v, unicode) else v) for k,v in my_dict.items()}
from https://stackoverflow.com/questions/1254454/fastest-way-to-convert-a-dicts-keys-values-from-unicode-to-str by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬에서 객체 속성 반복하기 (0) | 2018.10.06 |
---|---|
[PYTHON] 파이썬 소켓은 많은 양의 데이터를받습니다. (0) | 2018.10.06 |
[PYTHON] 이 OpenCV Python 인터페이스들 사이에 다른 점은 무엇입니까? (0) | 2018.10.06 |
[PYTHON] try-except를 사용하지 않고 Python에서 keyboardinterrupt 캡처 (0) | 2018.10.06 |
[PYTHON] 이 사전 목록을 CSV 파일로 변환하려면 어떻게합니까? (0) | 2018.10.06 |