Во-первых: вам действительно нужно , чтобы сделать это?Строки приведены в Unicode по причине: вы просто не можете представить все в простом ASCII, что вы можете в Unicode.Это, вероятно, не будет проблемой для ваших словарных ключей 'uid', 'name' и 'pic_small';но, вероятно, и не будет проблемой оставить их как Unicode.(Библиотека 'simplejson' ничего не знает о ваших данных, поэтому она использует Unicode для каждой строки - лучше, чем потом сожалеть.)
В любом случае:
В Python строки не могут быть изменены.Метод .encode
не изменяет строку;он возвращает новую строку, которая является закодированной версией.
Что вы хотите сделать, это создать новый словарь, который заменяет ключи закодированными ключами.Мы можем сделать это, передав каждую пару (кодированный ключ, исходное значение) как * args для конструктора dict.
Это выглядит так:
dict((k.encode('ascii'), v) for (k, v) in original.items())
Аналогично, мы можем использовать списокпонимание, чтобы применить это к каждому словарю, и создать новый список.(Мы можем изменить список на месте, но этот способ чище.)
response = simplejson.load(urllib.urlopen(REST_SERVER, data))
# We create the list of modified dictionaries, and re-assign 'response' to it:
response = [
dict((k.encode('ascii'), v) for (k, v) in original.items()) # the modified version
for original in response # of each original dictionary.
]
return response