我有一個包含不同層數的多個字典的串列。這是它的樣子:
data_ls = [
{"a": {"b": {"c1": {"d1": "d1_value"}}}},
{"a": {"b": {"c2": {"d2": {"e1": "e1_value "}}}}},
...
...
]
我需要將其寫入 JSON 檔案,這是我嘗試過的:
json_str = json.dumps(data_ls)
json_file = open("data.json", "w")
json_file.write(json_str)
輸出將如下所示:
[
{
"a": {
"b": {
"c1": {
"d1": "d1_value"
}
}
}
},
{
"a": {
"b": {
"c2": {
"d2": {
"e1": "e1_value "
}
}
}
}
}
]
但是一些相同的鍵被證明是分開嵌套的,所需的輸出如下所示:
[{
"a": {
"b": {
"c1": {"d1": "d1_value"},
"c2": {
"d2": {"e1": "e1_value "},
},
}
}
}]
我怎樣才能得到這樣的輸出?提前致謝!
uj5u.com熱心網友回復:
您可以一次使用帶有兩個字典的遞回函式,如果不更新密鑰,則檢查密鑰是否存在
import json
data = [
{},
{'a': {'b': {'c1': {'d1': 'd1_value'}}}},
{'a': {'b': {'c2': {'d2': {'e1': 'e1_value '}}}}},
{'a': {'b1': {'c3': 'd3'}}},
{'x': {'y': 'z'}},
{'a': {'b': {'c2': {'d2': {'e2': 'e2_value '}}}}}
]
def fun(d1: dict, d2: dict):
for k, v in d2.items():
if k not in d1:
d1[k] = v
if isinstance(v, dict):
return fun(d1[k], v)
res = data[0]
for d in data[1:]:
fun(res, d)
print(json.dumps(res))
輸出:
{
"a": {
"b": {
"c1": {
"d1": "d1_value"
},
"c2": {
"d2": {
"e1": "e1_value ",
"e2": "e2_value "
}
}
},
"b1": {
"c3": "d3"
}
},
"x": {
"y": "z"
}
}
筆記:
我只將嵌套元素視為 dicts 和其他非序列型別
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/431207.html
上一篇:從json中提取c#物件
