在python中从文本文件初始化字典

时间:2013-11-22 14:07:55

标签: python python-2.7

我有一个像这样的复杂的层次python字典

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

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

此代码段的输出为“c”,因此正确解释了分层字典。现在,我不想在代码中使用这个分层字典的硬编码,而是想从文件中读取它并将其分配给字典对象。也就是说,我将使用以下内容创建一个dict.txt文件:

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

当然,我将运行以读取文件流

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

然后,python中有没有方便的方法允许我轻松地将流中的内容分配给字典对象dict(而不是字符串)?

3 个答案:

答案 0 :(得分:4)

我建议您只需将整个dict = {...}放入文本文件中,将文件命名为something.py,然后命名为import something,并将其直接用作something.dict

答案 1 :(得分:3)

如果你确定它是那种确切的格式,那就是有效的JSON,所以你可以使用json.load(f)来加载和解析它。

JSON比Python更挑剔(例如它在尾随逗号上窒息,并且不接受单引号),因此您可能需要使用ast.literal_eval

答案 2 :(得分:1)

你可以这样做:

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

但是你的数据不只是一个嵌套的dict,而是设置为值(至少如果将其解释为Python语法),ast.literal_eval无法处理。

据我所知,出于同样的原因,这不是一个有效的JSON。