Подтвердить что ты не робот

Преобразовать словарь строки в юникод в словарь в python

У меня есть unicode u"{'code1':1,'code2':1}", и я хочу его в формате словаря.

Я хочу его в формате {'code1':1,'code2':1}.

Я попробовал unicodedata.normalize('NFKD', my_data).encode('ascii','ignore'), но он возвращает строку не словарь.

Кто-нибудь может мне помочь?

4b9b3361

Ответ 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}