Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中从文本文件初始化词典_Python_Python 2.7 - Fatal编程技术网

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

在python中从文本文件初始化词典,python,python-2.7,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"] 此代码段的

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

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

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

             {
               "key1":{"key11":{"a"},"key12":{"b"}},
               "key2":{"key21":{"c"},"key22":{"d"}},
               "key3":{"key31":{"e"},"key32":{"f"}}
             }
当然,然后我将运行以读取文件流

            stream = open("dict.txt", "r")
那么,python中是否有任何方便的方法可以让我轻松地将流中的内容分配给dictionary对象
dict
(不是字符串)?

您可以执行以下操作:

import ast
d = ast.literal_eval(stream.read())
但是,您的数据不仅仅是一个嵌套的dict,它还具有集作为值(至少如果有人将其解释为Python语法),这是
ast.literal\u eval
无法处理的

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

您可以:

import ast
d = ast.literal_eval(stream.read())
但是,您的数据不仅仅是一个嵌套的dict,它还具有集作为值(至少如果有人将其解释为Python语法),这是
ast.literal\u eval
无法处理的


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

我建议你简单地将整个
dict={…}
放入文本文件,将文件命名为
something.py
,然后
导入某个东西
并将其直接用作
something.dict

我建议你简单地将整个
dict={…}
到文本文件中,将文件命名为
something.py
,然后
导入某物
,并将其直接用作
something.dict

如果您确定它的格式正确,这就是有效的JSON,那么您可以使用
JSON.load(f)
来加载和解析它


尽管JSON比Python更挑剔(例如它被尾随的逗号堵住了,不接受单引号),所以您可能需要使用
ast.literal\u eval

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

尽管JSON比Python更挑剔(例如它使用尾随逗号,不接受单引号),所以您可能需要使用
ast.literal\u eval