<p>对于通过<code>new_data</code>循环并检查是否存在某些元素的问题,我采取了维护一个小型元目录的方法,该目录保存vessleId、weatherStatus和;民谣旗帜如下</p>
<pre><code>{'1': {'Good': ['B', 'L'], 'ROUGH': ['L']}}
</code></pre>
<p>python脚本:</p>
<pre><code>new_data = []
new_data_meta = {}
def get_vessel(_id):
return list(filter(lambda vessel: vessel["vesselId"] == _id, new_data))[0]
for item in data:
if item["vesselId"] in new_data_meta:
_data = get_vessel(item["vesselId"])
if item["weatherStatus"] in new_data_meta[item["vesselId"]]:
if (
item["ballastFlag"]
in new_data_meta[item["vesselId"]][item["weatherStatus"]]
):
_data["fuelPerformance"][item["weatherStatus"]][
item["ballastFlag"]
].append(
{
"speed": item["speedRange"],
"milesPerMT": {
"Min": item["milesPerMT_min"],
"Max": item["milesPerMT_max"],
"Avg": item["milesPerMT_avg"],
},
"fuelPerMilesPerCargo": item["fuelPerMilesPerCargo"],
}
)
else:
_data["fuelPerformance"][item["weatherStatus"]][item["ballastFlag"]] = [
{
"speed": item["speedRange"],
"milesPerMT": {
"Min": item["milesPerMT_min"],
"Max": item["milesPerMT_max"],
"Avg": item["milesPerMT_avg"],
},
"fuelPerMilesPerCargo": item["fuelPerMilesPerCargo"],
}
]
new_data_meta[item["vesselId"]][item["weatherStatus"]].append(
item["ballastFlag"]
)
else:
_data["fuelPerformance"][item["weatherStatus"]] = {
item["ballastFlag"]: [
{
"speed": item["speedRange"],
"milesPerMT": {
"Min": item["milesPerMT_min"],
"Max": item["milesPerMT_max"],
"Avg": item["milesPerMT_avg"],
},
"fuelPerMilesPerCargo": item["fuelPerMilesPerCargo"],
}
]
}
new_data_meta[item["vesselId"]][item["weatherStatus"]] = [
item["ballastFlag"]
]
else:
new_data.append(
{
"vesselId": item["vesselId"],
"vesselName": item["vesselName"],
"fuelPerformance": {
item["weatherStatus"]: {
item["ballastFlag"]: [
{
"speed": item["speedRange"],
"milesPerMT": {
"Min": item["milesPerMT_min"],
"Max": item["milesPerMT_max"],
"Avg": item["milesPerMT_avg"],
},
"fuelPerMilesPerCargo": item["fuelPerMilesPerCargo"],
}
]
}
},
}
)
new_data_meta[item["vesselId"]] = {item["weatherStatus"]: [item["ballastFlag"]]}
</code></pre>
<p>返回以下输出:</p>
<pre><code>[{
"vesselId": "1",
"vesselName": "ALPHA 01",
"fuelPerformance": {
"Good": {
"B": [{
"speed": "10-15",
"milesPerMT": {
"Min": "cycling",
"Max": 3,
"Avg": 3
},
"fuelPerMilesPerCargo": nan
}],
"L": [{
"speed": "5-10",
"milesPerMT": {
"Min": "cycling",
"Max": 45,
"Avg": 3
},
"fuelPerMilesPerCargo": nan
}]
},
"ROUGH": {
"L": [{
"speed": "10-15",
"milesPerMT": {
"Min": "reading",
"Max": 3.0,
"Avg": 3
},
"fuelPerMilesPerCargo": nan
},
{
"speed": "15-20",
"milesPerMT": {
"Min": "reading",
"Max": 3.0,
"Avg": 3
},
"fuelPerMilesPerCargo": nan
}
]
}
}
}]
</code></pre>