Преобразование строки в dict?

У меня есть скрипт, который изменяет dict на строку и сохраняет ее в файл. Я бы хотел загрузить этот файл и использовать его как dict, но это строка. Есть ли что-то вроде int("7") которое может изменить строку, отформатированную как dict ( {a: 1, b: 2} ) в dict? Я пробовал dict() , но это не похоже на то, что он делает. Я слышал о некоторых процессах, связанных с JSON и eval() , но я действительно не понимаю, что это делает. Программа загружает те же данные, которые она сохраняет, и если кто-то ее редактирует и не работает, это не проблема (мне не нужен какой-либо продвинутый метод подтверждения данных диктофона или чего-то еще).

4 Solutions collect form web for “Преобразование строки в dict?”

Попробуйте это, это самый безопасный способ:

 import ast ast.literal_eval("{'x':1, 'y':2}") => {'y': 2, 'x': 1} 

Все решения, основанные на eval() , опасны, вредоносный код может быть введен внутри строки и выполнен.

Согласно документации, выражение оценивается безопасно. Кроме того, согласно исходному коду , literal_eval анализирует строку на Python AST (исходное дерево) и возвращает только в том случае, если это литерал. Код никогда не выполняется, только анализируется, поэтому нет причин для риска для безопасности.

Этот формат не JSON, а YAML, который вы можете проанализировать с помощью PyYAML :

 >>> import yaml >>> s = '{a: 1, b: 2}' >>> d = yaml.load(s) >>> d {'a': 1, 'b': 2} >>> type(d) <type 'dict'> 

Вы можете использовать eval если доверяете входной строке.

 >>> a=eval('{"a":1,"b":2}') >>> a {'a': 1, 'b': 2} 

Сериализация

То, о чем вы говорите, это сериализация объектов , и есть лучшие способы сделать это, чем переносить свой собственный метод сериализации (хотя вы, похоже, придумали YAML). Оба они еще менее безопасны, чем ast.literal_eval() (особенно pickle ), но их здесь следует отметить.

JSON

Вот пример того, что вы хотите использовать JSON , популярный формат на разных языках:

 import json myDict = {'a':1, 'b':2} # write to the file 'data' with open('data','w') as f: json.dump(myDict, f) # now we can load it back with open('data','r') as f: myDictLoaded = json.load(f) print myDictLoaded 

Вывод:

 {u'a': 1, u'b': 2} 

соленый огурец

Вот второй пример, делающий то же самое, используя pickle . pickle более мощный в том, что он может сериализовать все * объекты python, даже те, которые вы пишете.

 import cPickle as pickle myDict = {'a':1, 'b':2} # write to the file 'data' with open('data','w') as f: pickle.dump(myDict, f) # now we can load it back with open('data','r') as f: myDictLoaded = pickle.load(f) print myDictLoaded 

Вывод:

 {'a': 1, 'b': 2} 
  • Как проверить, является ли строка допустимым регулярным выражением - python?
  • Доступ к переменной экземпляра экземпляра, но не экземпляр в Python
  • Подставлять подстроки, используя словарь в Python
  • Python - как найти все пересечения двух строк?
  • Самый быстрый способ изменить строку в python
  • Есть ли недостатки в использовании локалей Python () для форматирования строк?
  • Как получить подстроку из текстового файла в python?
  • Используйте Python для выбора строк с определенным диапазоном значений в одном столбце
  • Python - лучший язык программирования в мире.