Python 将两个不同JSON文件中具有相同ID的对象分组
我有两个json文件,其中包含多个Python 将两个不同JSON文件中具有相同ID的对象分组,python,json,Python,Json,我有两个json文件,其中包含多个objectID。我使用它们来计算具有相同ID的每个对象的平均值。我想我已经找到了使用此代码的方法: def formatAvg(): for itemcla in dataClassified: objectIdClassified = itemcla["objectID"] for itemauction in dataAuctions: objectIdAuctions = itemauct
objectID
。我使用它们来计算具有相同ID的每个对象的平均值。我想我已经找到了使用此代码的方法:
def formatAvg():
for itemcla in dataClassified:
objectIdClassified = itemcla["objectID"]
for itemauction in dataAuctions:
objectIdAuctions = itemauction["objectID"]
if objectIdClassified == objectIdAuctions:
itemauction["avg_total"] = {}
...
formatAvg()
其中dataClassified
和dataAuctions
是列表,而itemcla
和itemautation
是具有相同objectID的对象。但它根本不起作用。我认为这是因为if objectIdClassified==objectidActions:
行只检查objectID,但不将它们分组
dataClassified JSON的一个示例:
[{
"objectID": 10000,
"cars_getroute": "url",
"car_value": 50000
},
{
"objectID": 10001,
"cars_getroute": "url",
"car_value": 10000
},
{
"objectID": 10003,
"cars_getroute": "url",
"car_value": 50000
}]
数据拍卖JSON的示例:
[{
"objectID": 10000,
"value": 52000
},
{
"objectID": 10001,
"value": 12000
},
{
"objectID": 10002,
"value": 54000
}]
正如你所看到的,秩序并不总是受到尊重。我没有任何输出,因为没有任何更改
我的预期产出:
[{
"objectID": 10000,
"value": 52000,
"total_avg": 52000
},
{
"objectID": 10001,
"value": 12000,
"total_avg": 11000
}
},
{
"objectID": 10002,
"value": 54000,
"total_avg": 54000
}]
转换为dict使其更简单、更快:
def formatAvg(dataAuctions, dataClassified):
da = {i["objectID"]: i["value"] for i in dataAuctions}
dc = {i["objectID"]: {"cars_getroute": i["cars_getroute"], "car_value": i["car_value"]} for i in dataClassified}
# First pass iterated on wrong list...
#return [{"objectID": k, "value": v, "total_avg": round((da[k]+k)/2) if k in da else k} for k,v in dc.items()]
return [{"objectID": k, "value": v, "total_avg": round((v+dc[k]['car_value'])/2) if k in dc else v} for k,v in da.items()]
请提供一个小的(最小的)JSON示例,并考虑添加日志/输出,而不是思考,猜测不是一件坏事,但如果您的假设不正确,通常会导致浪费大量时间。日志记录只会显示正在发生的事情,通常会导致解决琐碎情况的方法。另外,O(N^2)!首先,将dataAuctions中的项目分组到一个散列中,该散列将其id映射到匹配itemauction的集合。然后,您可以计算每个集合的平均值。如果你想在一个双重嵌套的循环中做到这一点,实际上你必须在内部循环中进行两次传递answer@lf_celine-您希望看到的示例将有助于人们帮助您。另外,
dataClassified
是否真的在“车号”和“车价”之间交替?