我有以下.json文件:
{
"level1_one":"1",
"level1_two":{
"level2_one":"2",
"level2_two":{
"level3_one":"bottom"
}
}
}
我需要像这样给它嵌套和展平的表示:
{
"level1_two": {
"level2_two": {
"level3_one": "bottom"
},
"level2_one": "2"
},
"level1_one": "1"
}
和
{
"level2_one": "2",
"level3_one": "bottom",
"level1_one": "1"
}
我知道只需执行此操作即可轻松实现嵌套表单:
def json_parser(filename):
data = json.load(open(filename))
print(data)
问题是需要通过对两种情况使用递归来完成。我尝试了几乎所有我能找到的东西,但没有取得多大成功。我怎么能这样做?
答案 0 :(得分:1)
你可以试试这个:
s = {
"level1_one":"1",
"level1_two":{
"level2_one":"2",
"level2_two":{
"level3_one":"bottom"
}
}
}
def flatten(s):
for i in s:
if not isinstance(s[i], dict):
yield (i, s[i])
else:
for b in flatten(s[i]):
yield b
new_data = dict(list(flatten(s)))
输出:
{'level2_one': '2', 'level3_one': 'bottom', 'level1_one': '1'}
答案 1 :(得分:0)
像这样的东西
def flatten_dict(d):
def items():
for key, value in d.items():
if isinstance(value, dict):
for subkey, subvalue in flatten_dict(value).items():
yield subkey, subvalue
else:
yield key, value
return dict(items())
返回
{'level1_one': '1', 'level2_one': '2', 'level3_one': 'bottom'}
您发布的示例