我有一个像这样的复杂的层次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
(而不是字符串)?
答案 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。