2013-11-22 6 views
1

У меня есть сложный иерархический словарь питона, как этотИнициирование словаря из текстового файла в Python

 dict = { 
       "key1":{"key11":{"a"},"key12":{"b"}}, 
       "key2":{"key21":{"c"},"key22":{"d"}}, 
       "key3":{"key31":{"e"},"key32":{"f"}} 
      } 

     print dict["key2"]["key21"] 

Выходом этого фрагмента кода является «с», так иерархический словарь правильно интерпретированы. Теперь вместо жесткого кода этот иерархический словарь в коде, я хочу прочитать его из файла и назначить его для словарного объекта. То есть, я буду создавать dict.txt файл со следующим содержанием:

   { 
       "key1":{"key11":{"a"},"key12":{"b"}}, 
       "key2":{"key21":{"c"},"key22":{"d"}}, 
       "key3":{"key31":{"e"},"key32":{"f"}} 
      } 

Конечно, я тогда работать, чтобы прочитать поток файла

  stream = open("dict.txt", "r") 

Тогда, есть ли удобный метод в python, который позволяет мне легко назначить контент в потоке объекту словаря dict (а не как строку)?

ответ

4

Я предлагаю вам просто поставить весь dict = {...} в текстовый файл, имя файла something.py, а затем import something и использовать его непосредственно в качестве something.dict.

1

Вы можете сделать:

import ast 
d = ast.literal_eval(stream.read()) 

Но ваши данные не только вложенным ДИКТ, а он имеет наборы в качестве значений (по крайней мере, если интерпретировать его как синтаксис Python), который ast.literal_eval не может справиться.

Из того, что я понимаю, это недействительный JSON по той же причине.

3

Если вы уверены, что это именно точный формат, это действительно JSON, поэтому вы можете использовать json.load(f) для загрузки и анализа.

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

Смежные вопросы