Преобразовать словарь строки в юникод в словарь в python
У меня есть unicode u"{'code1':1,'code2':1}"
, и я хочу его в формате словаря.
Я хочу его в формате {'code1':1,'code2':1}
.
Я попробовал unicodedata.normalize('NFKD', my_data).encode('ascii','ignore')
, но он возвращает строку не словарь.
Кто-нибудь может мне помочь?
Ответы
Ответ 1
Вы можете использовать встроенный пакет ast
:
import ast
d = ast.literal_eval("{'code1':1,'code2':1}")
Справка по функции literal_eval в модуле ast:
literal_eval (node_or_string)
Безопасно оценить выражение node или строку, содержащую выражение Python. Строка или node может содержать только следующие литературные структуры Python: строки, числа, кортежи, списки, dicts, booleans и None.
Ответ 2
Вы можете использовать literal_eval
. Вы также можете быть уверены, что создаете диктофон, а не что-то другое. Вместо assert
используйте собственную обработку ошибок.
from ast import literal_eval
from collections import MutableMapping
my_dict = literal_eval(my_str_dict)
assert isinstance(my_dict, MutableMapping)
Ответ 3
РЕДАКТИРОВАТЬ. Оказывается, мое предположение неверно; потому что ключи не обернуты двойными кавычками ( "), строка не JSON. Смотрите здесь для некоторых способов обойти это.
Я предполагаю, что вы можете быть JSON, а также обозначение объекта JavaScript.
Вы можете использовать встроенный модуль json
для Python:
import json
result = json.loads(u"{'code1':1,'code2':1}") # will NOT work; see above
Ответ 4
Вы можете использовать встроенную функцию eval
для преобразования строки в объект python
>>> string_dict = u"{'code1':1, 'code2':1}"
>>> eval(string_dict)
{'code1': 1, 'code2': 1}