gpt4 book ai didi

python - 重组 JSON

转载 作者:行者123 更新时间:2023-11-28 19:23:11 28 4
gpt4 key购买 nike

需要将 JSON 重组为 Python 中的新结构。

例如:

{
'a' : 1,
'b' : 1,
'd' : {'d1' : '1', 'd2' : 2},
'm' : [
{'x' : 6, 'y' : 5, 'z' : {'foo' : 'foo1', 'bar' : 'bar1'} },
{'x' : 8, 'y' : 8, 'z' : {'foo' : 'foo2', 'bar' : 'bar2'} }
]
}

{
'new_a' : 1,
'new_d' : {'new_d1' : '1', 'new_d2' : 2},
'new_m' : [
{'new_x' : 6, 'new_z' : {'new_foo' : 'foo1', new_'bar : 'bar1'} },
{'new_x' : 8, 'new_z' : {'new_foo' : 'foo2', 'new_bar : 'bar2'} }
]
}

有一个旧JSON的新形式的想法

有没有更优雅的方式来做到这一点?

import json

new_data = {}
new_data['new_a'] = old_data['a']
new_data['new_d'] = {}
new_data['new_d']['new_d1'] = old_data['d']['d1']
new_data['new_d']['new_d2'] = old_data['d']['d2']
new_data['new_m'] = {}
new_m = []
for m in old_data:
new_m.append({'new_x' : m['x'], 'new_z' : {'new_foo' ....

最佳答案

您提到了结果代码必须删除“少数字段”的要求。使用处理字典和列表的递归循环,我们可以将所有键更改为 new_ 并删除您指定的任何字段。

a = {
'a' : 1,
'b' : 1,
'd' : {'d1' : '1', 'd2' : 2},
'm' : [
{'x' : 6, 'y' : 5, 'z' : {'foo' : 'foo1', 'bar' : 'bar1'} },
{'x' : 8, 'y' : 8, 'z' : {'foo' : 'foo2', 'bar' : 'bar2'} }
]
}

def rename(dt):
ndt = {}
for k, v in dt.iteritems():
if k == 'y': # the keys that you wish to remove from the new dictionary
continue
if isinstance(v, dict):
ndt['new_' + k] = rename(v)
elif isinstance(v, list):
ndt['new_' + k] = [rename(x) for x in v]
else:
ndt['new_' + k] = v
return ndt

print rename(a) # your expected dictionary

如果需要进行任何结构重组(例如,您想将一个值移到其他地方,或者如果您不想遵循现有的命名约定),那么您现有的代码已经是最简洁的方法所以。

关于python - 重组 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19851288/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com