я создал упорядоченный словарь python, импортировав коллекции и сохранив его в файле с именем «filename.txt». содержимое файла выглядит так
OrderedDict([(7, 0), (6, 1), (5, 2), (4, 3)])
мне нужно использовать этот OrderedDict из другой программы. я делаю это как
myfile = open('filename.txt','r')
mydict = myfile.read()
мне нужно получить 'mydict' от Type
<class 'collections.OrderedDict'>
но здесь он имеет тип 'str'.
Есть ли в python способ преобразовать строковый тип в тип OrderedDict? используя питон 2.7
eval
) на ваш вопрос, но вам действительно не следует хранить его таким образом. - person jamylak   schedule 08.05.2012eval()
- person John La Rooy   schedule 08.05.2012eval
, скорее религиозны, чем рациональны. Каждая языковая конструкция существует по какой-то причине, и нет необходимости изобретать что-то сложное, когда одна-единственнаяeval(x)
делает свое дело. Да, его следует использовать с осторожностью (как и любую другую вещь), но пока данные поступают из надежного источника, использованиеeval
вполне нормально. - person georg   schedule 08.05.2012goto
, это не то, что вам когда-либо нужно использовать в таком современном языке, как Python. Он там, потому что есть варианты использования и для вашей 2-минутной программы, чтобы сделать x, y или z - кого это волнует, но помимо этого, он всегда должен сопровождаться предупреждениями о вреде для здоровья. - person Gareth Latty   schedule 09.05.2012find "/System/Library/Frameworks/Python.framework" -name "*.py" | xargs grep "eval(" | wc -l
печатает 1212, так что да, у него есть применение. Что касается goto и современных языков, вам может быть интересно прочитать это классическое обсуждение. - person georg   schedule 09.05.2012goto
, но с ним намного проще делать плохие вещи, так зачем беспокоиться, когда есть лучшие способы сделать что-то? У меня такой же мыслительный процесс сeval()
- я всегда могу сделать это по-другому, и мне еще предстоит найти случай, когда в целом было бы более разумно использоватьeval()
вместо альтернативы. Всегда есть слишком много причин, чтобы сделать это по-другому. - person Gareth Latty   schedule 09.05.2012