我有一個 Json 資料如下。Json 有許多具有相同 NameId 的此類物件:
[{
"NameId": "name1",
"exp": {
"exp1": "test1"
}
}, {
"NameId": "name1",
"exp": {
"exp2": "test2"
}
}
]
現在,我要創建一個具有合并 exp 的新 Json 物件并創建一個類似下面的檔案,這樣我就沒有多個 NameId:
[{“NameId”:“name1”,“exp”:{“exp1”:“test1”,“exp2”:“test2”}}]
有沒有可能我可以使用 Python 來實作它?
uj5u.com熱心網友回復:
您可以進行手動作業,在重建結構的同時合并條目。您可以保留一個帶有 exp 的字典來合并它們。
import json
jsonData = [{
"NameId": "name1",
"exp": {
"exp1": "test1"
}
}, {
"NameId": "name1",
"exp": {
"exp2": "test2"
}
}, {
"NameId": "name2",
"exp": {
"exp3": "test3"
}
}]
result = []
expsDict = {}
for entry in jsonData:
nameId = entry["NameId"]
exp = entry["exp"]
if nameId in expsDict:
# Merge exp into resultExp.
# Note that resultExp belongs to both result and expsDict,
# changes made will be reflected in both containers!
resultExp = expsDict[nameId]
for (expName, expValue) in exp.items():
resultExp[expName] = expValue
else:
# Add a new item to the result
result.append(entry)
# Store exp to later merge other entries with the same name
expsDict[nameId] = exp
print(result)
uj5u.com熱心網友回復:
您可以使用itertools.groupby和functools.reduce
d = [{
"NameId": "name1",
"exp": {
"exp1": "test1"
}
}, {
"NameId": "name1",
"exp": {
"exp2": "test2"
}
}]
from itertools import groupby
[ {'NameId': k, 'exp': reduce(lambda x,y : {**x["exp"], **y["exp"]} , v) } for k,v in groupby(sorted(d, key=lambda x: x["NameId"]), lambda x: x["NameId"]) ]
#output
[{'NameId': 'name1', 'exp': {'exp1': 'test1', 'exp2': 'test2'}}]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/521235.html
標籤:Pythonjson
上一篇:如何去除這種型別的像素
