我有一個如下所示的 JSON 檔案:
{
"returnCode": 200,
"message": "OK",
“people”: [
{
“details: {
"first": “joe”,
“last”: doe,
“id”: 1234567,
},
“otheDetails”: {
“employeeNum”: “0000111222”,
“res”: “USA”,
“address”: “123 main street”,
},
“moreDetails”: {
“family”: “yes”,
“siblings”: “no”,
“home”: “USA”,
},
},
{
“details: {
"first": “jane”,
“last”: doe,
“id”: 987654321,
},
“otheDetails”: {
“employeeNum”: “222333444”,
“res”: “UK”,
“address”: “321 nottingham dr”,
},
“moreDetails”: {
“family”: “yes”,
“siblings”: “yes”,
“home”: “UK,
},
}
這顯示了兩個條目,但實際上有數百個或更多。我不知道代碼運行時的條目數。
我的目標是遍歷每個條目并獲取“詳細資訊”下的“id”。我將 JSON 加載到名為“data”的 python dict 中,并且能夠通過以下方式獲得第一個“id”:
data['people'][0]['details']['id']
然后我可以通過將“0”增加到“1”來獲得第二個“id”。我知道我可以設定 i = 0 然后增加 i,但由于我不知道條目的數量,這不起作用。有沒有更好的辦法?
uj5u.com熱心網友回復:
您可以dict.get在串列推導式中使用method 以避免在 上出現 KeyError id。這樣,您可以在沒有ids 的情況下填充字典None:
ids = [dct['details'].get('id') for dct in data['people']]
如果您仍然收到 KeyError,那么這可能意味著某些dctsdata['people']沒有details密鑰。在這種情況下,最好將此練習包含在try/except. 您可能還想確定哪些dct沒有details密鑰,哪些可以使用error_dctlist收集(您可以從下面取消注釋)。
ids = []
#error_dct = []
for dct in data['people']:
try:
ids.append(dct['details']['id'])
except KeyError:
ids.append(None)
#error_dct.append(dct)
輸出:
1234567
987654321
uj5u.com熱心網友回復:
與串列理解相比,pythonic 更少,但在這里可以使用簡單的 for 回圈。
您可以先計算people串列中的人數,然后遍歷串列,在每次迭代時提取每個 id:
id_list = []
for i in range(len(data['people'])):
current_id = data['people'][i]['details']['id']
id_list.append(current_id)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/400141.html
