Как я могу преобразовать str
представление a dict
, такое как следующая строка, в a dict
?
s = "{'muffin' : 'lolz', 'foo' : 'kitty'}"
Я предпочитаю не использовать eval
. Что еще я могу использовать?
Основная причина этого, один из написанных им классов моих коллег, преобразует все входные данные в строки. Я не в настроении идти и модифицировать свои занятия, чтобы заниматься этим вопросом.
python
string
dictionary
UberJumper
источник
источник
"
двойные кавычки вокруг строк, у вас, вероятно, есть данные JSON. Вы также можете искатьnull
,true
илиfalse
, синтаксис Python используетNone
,True
иFalse
.Ответы:
Начиная с Python 2.6 вы можете использовать встроенный
ast.literal_eval
:Это безопаснее, чем использовать
eval
. Как говорят его собственные документы:Например:
источник
"dict(a=1)"
стилей?https://docs.python.org/3.8/library/json.html
JSON может решить эту проблему, хотя его декодеру нужны двойные кавычки вокруг ключей и значений. Если вы не возражаете взломать замену ...
Обратите внимание, что если у вас есть одинарные кавычки как часть ваших ключей или значений, это не удастся из-за неправильной замены символов. Это решение рекомендуется только в случае сильного отвращения к решению eval.
Подробнее о одиночной кавычке json: jQuery.parseJSON выдает ошибку «Invalid JSON» из-за экранированной одинарной кавычки в JSON
источник
{"foo": "b'ar"}
{'foo': (1, 2, 3)}
+1
для информирования, что декодер хочет двойные кавычки вокруг ключей и значений."{0: 'Hello'}"
.используя
json.loads
:источник
К примеру ОП:
Мы можем использовать Yaml для обработки такого нестандартного json в строке:
источник
Если строке всегда можно доверять, вы можете использовать
eval
(или использоватьliteral_eval
как предложено; это безопасно, независимо от того, какая строка.) В противном случае вам нужен парсер. Парсер JSON (например, simplejson) будет работать, если он только хранит контент, который соответствует схеме JSON.источник
Использование
json
.ast
библиотека потребляет много памяти и и медленнее. У меня есть процесс, который должен прочитать текстовый файл 156Mb.Ast
с 5 минутной задержкой для словаря преобразованияjson
и 1 минутой, используя на 60% меньше памяти!источник
Обобщить:
Результаты:
Вывод: предпочитаю json.loads
источник
источник
{
или}
. Что делать, если оно вложеноdict
. Что если значение содержит,
??никакие библиотеки не используются:
ПРИМЕЧАНИЕ. Поскольку он жестко закодирован, он
split("'")
будет работать только для строк, в которых данные имеют одинарные кавычки.источник