如果我有字典:
{
"cats": {
"sphinx": 3,
"british": 2
},
"dogs": {}
}
并尝试将其保存到文本文件中,我得到这样的结果:
{"cats": {"sphinx": 3}, {"british": 2}, "dogs": {}}
如何以漂亮的格式保存字典,因此人眼很容易阅读?
答案 0 :(得分:5)
您可以导入json并指定缩进级别:
import json
d = {
"cats": {
"sphinx": 3,
"british": 2
},
"dogs": {}
}
j = json.dumps(d, indent=4)
print(j)
{
"cats": {
"sphinx": 3,
"british": 2
},
"dogs": {}
}
请注意,这是一个字符串,但是:
>>> j
'{\n "cats": {\n "sphinx": 3, \n "british": 2\n }, \n "dogs": {}\n}'
答案 1 :(得分:3)
如果你想以更标准的格式保存它,你也可以使用yaml文件(以及相关的python包http://pyyaml.org/wiki/PyYAMLDocumentation),代码如下:
import yaml
dictionary = {"cats": {"sphinx": 3}, {"british": 2}, "dogs": {}}
with open('dictionary_file.yml', 'w') as yaml_file:
yaml.dump(dictionary, stream=yaml_file, default_flow_style=False)
dump
创建一个yaml格式的字符串以写入该文件。请注意,可以指定流并立即将内容写入文件。如果在写入文件之前由于某种原因需要获取字符串,则不要指定它并在使用write
函数后对其进行写入。
另请注意,参数default_flow_style允许具有更好的格式;在示例中文件看起来:
cats:
british: 2
sphinx: 3
dogs: {}
再次在字典中加载yaml文件:
import yaml
with open('dictionary_file.yml', 'r') as yaml_file:
dictionary = yaml.load(yaml_file)
答案 2 :(得分:2)
您可以使用pprint:
const jackets = {[parent]: responses}
console.log(jackets)
// gives
{"jackets":[{"color":"red","size":"medium"}]}
答案 3 :(得分:0)
您可以使用Python Object Notation模块(pon转储它:免责声明我是该模块的作者)
from pon import PON, loads
data = {
"cats": {
"sphinx": 3,
"british": 2
},
"dogs": {}
}
pon = PON(obj=data)
pon.dump()
给出:
dict(
cats=dict(
sphinx=3,
british=2,
),
dogs=dict( ),
)
这也是正确的Python,但是使用dict
来交换密钥所需的引用字符串。
您可以使用以下命令重新加载:
read_back = loads(open('file_name.pon').read())
print(read_back)
,并提供:
{'cats': {'sphinx': 3, 'british': 2}, 'dogs': {}}
请注意loads()
不评估字符串,它实际上使用python的内置解析器安全地解析它。
PON还允许您从文件加载python词典,这些文件具有注释条目,并在保留注释的同时转储它们。这就是它真正有用的地方。
或者,如果你想要一些像YAML格式一样更具可读性的东西,你可以使用ruamel.yaml
并执行:
import ruamel.yaml
ruamel.yaml.round_trip_dump(data, stream=open('file_name.yaml', 'wb'), indent=4)
,它为您提供了一个文件file_name.yaml
,内容为:
cats:
sphinx: 3
british: 2
dogs: {}
使用您似乎更喜欢的缩进(并且比@ alberto' s版本更有效)