Возможный дубликат:
Как получить строку Объекты вместо Unicode из JSON в Python?
У меня много входных данных, поскольку многоуровневые словари анализируются из вызовов API JSON. Строки все в юникоде, что означает, что существует много u'stuff like this'
. Я использую jq, чтобы поиграть с результатами и вам нужно преобразовать эти результаты в ASCII.
Я знаю, что могу написать функцию, чтобы просто преобразовать ее так:
def convert(input):
if isinstance(input, dict):
ret = {}
for stuff in input:
ret = convert(stuff)
elif isinstance(input, list):
ret = []
for i in range(len(input))
ret = convert(input[i])
elif isinstance(input, str):
ret = input.encode('ascii')
elif :
ret = input
return ret
Это даже правильно? Не уверен. Это не то, что я хочу спросить вас, хотя.
То, о чем я прошу, это типичное решение проблемы с грубой силой. Должен быть лучший способ. Более пифонический путь. Я не эксперт по алгоритмам, но этот тоже не выглядит особенно быстрым.
Так есть лучший способ? Или, если нет, можно ли улучшить эту функцию...?
Редактирование после ответа
Ответ от Марка Эмери является правильным, но я хотел бы опубликовать его модифицированную версию. Его функция работает на Python 2.7+, и я на 2.6, поэтому мне пришлось ее преобразовать:
def convert(input):
if isinstance(input, dict):
return dict((convert(key), convert(value)) for key, value in input.iteritems())
elif isinstance(input, list):
return [convert(element) for element in input]
elif isinstance(input, unicode):
return input.encode('utf-8')
else:
return input