我有一個包含許多條目的 .json 檔案,如下所示:
{
"name": "abc",
"time": "20220607T190731.442",
"id": "123",
"relatedIds": [
{
"id": "456",
"source": "sourceA"
},
{
"id": "789",
"source": "sourceB"
}
],
}
我將每個條目保存在 python 物件中,但是,我只需要來自源 A 的相關 ID。問題是,來自源 A 的相關 ID 并不總是該嵌套串列中的第一位。
因此data['relatedIds'][0]['id']產生正確的 ID 是不可靠的。
目前我正在解決這樣的問題:
import json
with open("filepath", 'r') as file:
data = json.load(file)
for value in data['relatedIds']:
if(value['source'] == 'sourceA'):
id_from_a = value['id']
entry = Entry(data['name'], data['time'], data['id'], id_from_a)
我不認為這種方法是最佳解決方案,特別是如果相關 ID 串列變得更長并且附加到 JSON 檔案的條目更多。
是否有一種更復雜的方法可以從指定的源中挑選出這個“id”值而不回圈遍歷該嵌套串列中的所有條目?
uj5u.com熱心網友回復:
你能得到任何生成你的 .json 檔案的東西來生成相關 ID 作為一個物件而不是一個串列嗎?
{
"name": "abc",
"time": "20220607T190731.442",
"id": "123",
"relatedIds": {
"sourceA": "456",
"sourceB": "789"
}
}
如果沒有,我會說你在串列中回圈,直到你找到你要找的東西。
uj5u.com熱心網友回復:
對于更清潔的解決方案,您可以嘗試使用filter()帶有簡單 lambda 的 python 函式:
import json
with open("filepath", 'r') as file:
data = json.load(file)
filtered_data = filter(lambda a : a["source"] == "sourceA", data["relatedIds"])
id_from_a = next(filtered_data)
entry = Entry(data['name'], data['time'], data['id'], id_from_a)
如果我誤解了您的 json 檔案的外觀,請糾正我,但它似乎對我有用。
uj5u.com熱心網友回復:
一次一步,以獲取所有條目:
>>> data["relatedIds"]
[{'id': '789', 'source': 'sourceB'}, {'id': '456', 'source': 'sourceA'}]
接下來,為了只獲取 source=sourceA 的那些條目:
>>> [e for e in data["relatedIds"] if e["source"] == "sourceA"]
[{'id': '456', 'source': 'sourceA'}]
現在,由于您不想要整個條目,而只想要 ID,我們可以更進一步:
>>> [e["id"] for e in data["relatedIds"] if e["source"] == "sourceA"]
['456']
從那里,只需獲取第一個 ID:
>>> [e["id"] for e in data["relatedIds"] if e["source"] == "sourceA"][0]
'456'
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/488446.html
