Преобразование строки в 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 - лучший язык программирования в мире.