我有兩個 json 檔案:file1.json 和 file2.json 先后創建。我想通過為每個物件添加 file2 的資料來完成 file1。物件的數量完全相同,并且具有所有相同的屬性
檔案 1 和 2 具有完全相同的結構:檔案 1 中的串列(打開、關閉、...)將附加檔案 2 中的值,deltasum、detlatot 等屬性將使用檔案 2 中的值進行更改。
[{"symbol": "AUDUSD=X", "open": [0.72, 0.72], "close": [0.72, 0.72], "high": [0.72, 0.73], "low": [0.72, 0.73], "timestamp": [1647262622, 1647262682], "volume": [0, 0], "delta": [0.0, 0.0], "deltasum": 2.839999999999999, "deltatot": 2.8022723967505714, "voltot": 0, "cmfs": [0, 0, 0, 0], "mfms": [0, -1.0, 0, 0, 0], "resist": [0, 0, 0]}, {"symbol": "AUDNZD=X", …
我嘗試過轉儲樣式,但無法根據需要重建檔案。非常感謝您的支持或想法。
uj5u.com熱心網友回復:
我假設您在兩個串列中都有相同的符號,并且符號在串列中的順序相同。
您可以使用for-loop withzip()將第一行和第二行作為對進行處理。
稍后您可以使用.extend或 =將一個串列中的所有值添加到另一個串列中。
a = [
{"symbol": "AUDUSD=X", "open": [0.72, 0.72], "close": [0.72, 0.72], "high": [0.72, 0.73], "low": [0.72, 0.73], "timestamp": [1647262622, 1647262682], "volume": [0, 0], "delta": [0.0, 0.0], "deltasum": 2.839999999999999, "deltatot": 2.8022723967505714, "voltot": 0, "cmfs": [0, 0, 0, 0], "mfms": [0, -1.0, 0, 0, 0], "resist": [0, 0, 0]},
{"symbol": "AUDNZD=X", "open": [0.72, 0.72], "close": [0.72, 0.72], "high": [0.72, 0.73], "low": [0.72, 0.73], "timestamp": [1647262622, 1647262682], "volume": [0, 0], "delta": [0.0, 0.0], "deltasum": 2.839999999999999, "deltatot": 2.8022723967505714, "voltot": 0, "cmfs": [0, 0, 0, 0], "mfms": [0, -1.0, 0, 0, 0], "resist": [0, 0, 0]},
]
b = [
{"symbol": "AUDUSD=X", "open": [0.72, 0.72], "close": [0.72, 0.72], "high": [0.72, 0.73], "low": [0.72, 0.73], "timestamp": [1647262622, 1647262682], "volume": [0, 0], "delta": [0.0, 0.0], "deltasum": 2.839999999999999, "deltatot": 2.8022723967505714, "voltot": 0, "cmfs": [0, 0, 0, 0], "mfms": [0, -1.0, 0, 0, 0], "resist": [0, 0, 0]},
{"symbol": "AUDNZD=X", "open": [0.72, 0.72], "close": [0.72, 0.72], "high": [0.72, 0.73], "low": [0.72, 0.73], "timestamp": [1647262622, 1647262682], "volume": [0, 0], "delta": [0.0, 0.0], "deltasum": 2.839999999999999, "deltatot": 2.8022723967505714, "voltot": 0, "cmfs": [0, 0, 0, 0], "mfms": [0, -1.0, 0, 0, 0], "resist": [0, 0, 0]},
]
for a_row, b_row in zip(a, b):
# extend lists
#a_row['open'].extend( b_row['open'] )
a_row['open'] = b_row['open']
a_row['close'] = b_row['close']
a_row['high'] = b_row['high']
a_row['low'] = b_row['low']
a_row['timestamp'] = b_row['timestamp']
a_row['volume'] = b_row['volume']
# ... etc.
# replace values
a_row['deltasum'] = b_row['deltasum']
a_row['deltatot'] = b_row['deltatot']
# ... etc.
import pprint
pprint.pprint(a)
for如果你使用內部回圈,你可以讓它更短
a = [
{"symbol": "AUDUSD=X", "open": [0.72, 0.72], "close": [0.72, 0.72], "high": [0.72, 0.73], "low": [0.72, 0.73], "timestamp": [1647262622, 1647262682], "volume": [0, 0], "delta": [0.0, 0.0], "deltasum": 2.839999999999999, "deltatot": 2.8022723967505714, "voltot": 0, "cmfs": [0, 0, 0, 0], "mfms": [0, -1.0, 0, 0, 0], "resist": [0, 0, 0]},
{"symbol": "AUDNZD=X", "open": [0.72, 0.72], "close": [0.72, 0.72], "high": [0.72, 0.73], "low": [0.72, 0.73], "timestamp": [1647262622, 1647262682], "volume": [0, 0], "delta": [0.0, 0.0], "deltasum": 2.839999999999999, "deltatot": 2.8022723967505714, "voltot": 0, "cmfs": [0, 0, 0, 0], "mfms": [0, -1.0, 0, 0, 0], "resist": [0, 0, 0]},
]
b = [
{"symbol": "AUDUSD=X", "open": [0.72, 0.72], "close": [0.72, 0.72], "high": [0.72, 0.73], "low": [0.72, 0.73], "timestamp": [1647262622, 1647262682], "volume": [0, 0], "delta": [0.0, 0.0], "deltasum": 2.839999999999999, "deltatot": 2.8022723967505714, "voltot": 0, "cmfs": [0, 0, 0, 0], "mfms": [0, -1.0, 0, 0, 0], "resist": [0, 0, 0]},
{"symbol": "AUDNZD=X", "open": [0.72, 0.72], "close": [0.72, 0.72], "high": [0.72, 0.73], "low": [0.72, 0.73], "timestamp": [1647262622, 1647262682], "volume": [0, 0], "delta": [0.0, 0.0], "deltasum": 2.839999999999999, "deltatot": 2.8022723967505714, "voltot": 0, "cmfs": [0, 0, 0, 0], "mfms": [0, -1.0, 0, 0, 0], "resist": [0, 0, 0]},
]
for a_row, b_row in zip(a, b):
# extend lists
for key in ['open', 'close', 'high', 'low', 'timestamp', 'volume']: # ... etc. ...
#a_row[key].extend( b_row[key] )
a_row[key] = b_row[key]
# replace values
for key in ['deltasum', 'deltatot']: # ... etc. ...
a_row[key] = b_row[key]
import pprint
pprint.pprint(a)
您還可以key,value從行中獲取每一個并用于isinstence()檢查值是串列還是字串 - 并運行不同的函式
a = [
{"symbol": "AUDUSD=X", "open": [0.72, 0.72], "close": [0.72, 0.72], "high": [0.72, 0.73], "low": [0.72, 0.73], "timestamp": [1647262622, 1647262682], "volume": [0, 0], "delta": [0.0, 0.0], "deltasum": 2.839999999999999, "deltatot": 2.8022723967505714, "voltot": 0, "cmfs": [0, 0, 0, 0], "mfms": [0, -1.0, 0, 0, 0], "resist": [0, 0, 0]},
{"symbol": "AUDNZD=X", "open": [0.72, 0.72], "close": [0.72, 0.72], "high": [0.72, 0.73], "low": [0.72, 0.73], "timestamp": [1647262622, 1647262682], "volume": [0, 0], "delta": [0.0, 0.0], "deltasum": 2.839999999999999, "deltatot": 2.8022723967505714, "voltot": 0, "cmfs": [0, 0, 0, 0], "mfms": [0, -1.0, 0, 0, 0], "resist": [0, 0, 0]},
]
b = [
{"symbol": "AUDUSD=X", "open": [0.72, 0.72], "close": [0.72, 0.72], "high": [0.72, 0.73], "low": [0.72, 0.73], "timestamp": [1647262622, 1647262682], "volume": [0, 0], "delta": [0.0, 0.0], "deltasum": 2.839999999999999, "deltatot": 2.8022723967505714, "voltot": 0, "cmfs": [0, 0, 0, 0], "mfms": [0, -1.0, 0, 0, 0], "resist": [0, 0, 0]},
{"symbol": "AUDNZD=X", "open": [0.72, 0.72], "close": [0.72, 0.72], "high": [0.72, 0.73], "low": [0.72, 0.73], "timestamp": [1647262622, 1647262682], "volume": [0, 0], "delta": [0.0, 0.0], "deltasum": 2.839999999999999, "deltatot": 2.8022723967505714, "voltot": 0, "cmfs": [0, 0, 0, 0], "mfms": [0, -1.0, 0, 0, 0], "resist": [0, 0, 0]},
]
for a_row, b_row in zip(a, b):
for key, value in b_row.items():
if isinstance(value, list):
# extend lists
a_row[key] = value # b_row[key]
else:
# replace values
a_row[key] = value # b_row[key]
import pprint
pprint.pprint(a)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/443555.html
