Python: Konwertuj złożony słownik ciągów znaków z Unicode na ASCII [duplikat]
Możliwy duplikat:
Jak uzyskać obiekty string zamiast Unicode z JSON w Pythonie?
Mam dużo danych wejściowych jako słowniki wielopoziomowe analizowane z wywołań API JSON. Wszystkie ciągi są w Unicode, co oznacza, że jest ich dużou'stuff like this'
. ja używamjq bawić się wynikami i konwertować te wyniki na ASCII.
Wiem, że mogę napisać funkcję, która po prostu przekonwertuje to tak:
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
Czy to prawda? Niepewny. Ale nie o to chcę cię zapytać.
Pytam, to typowe rozwiązanie problemu brute-force. Musi być lepszy sposób. Bardziej pytoniczny sposób. Nie jestem ekspertem od algorytmów, ale ten też nie wygląda szczególnie szybko.
Czy jest lepszy sposób? A jeśli nie, czy można poprawić tę funkcję ...?
Edycja po odpowiedzi
Odpowiedź Marka Ameryka jest poprawne, ale chciałbym zamieścić zmodyfikowaną wersję tego pliku. Jego funkcja działa na Pythonie 2.7+, a ja na 2.6, więc musiałem go przekonwertować:
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