簡體   English   中英

在Python列表中訪問字典

[英]Accessing dictionary inside Python List

我有一個包含這樣的字典的列表:

json_obj = [[{'id': None},{'id': '5b98d01c0835f23f538cdcab'},{'id': '5b98d0440835f23f538cdcad'},{'id': '5b98d0ce0835f23f538cdcb9'}],[{'id': None},{'id': '5b98d01c0835f23f538cd'},{'id': '5b98d0440835f23f538cd'},{'id': '5b98d0ce0835f23f538cdc'}]]

我希望它存儲在這樣的列表列表中:

y=[['None','5b98d01c0835f23f538cdcab','5b98d0440835f23f538cdcad','5b98d0ce0835f23f538cdcb9'],['None','5b98d01c0835f23f538cd','5b98d0440835f23f538cd','5b98d0ce0835f23f538cdc']]

為了從字典中讀取ID,我嘗試了

for d in json_obj:
    print(d['id'])

但是我在上面的代碼中看到了這個錯誤:

TypeError: list indices must be integers or slices, not str

您有一個嵌套的列表列表 有時可以明顯觀察到這一點,請注意嵌套的[]語法:

json_obj = [[{'id': None}, {'id': 'abc'}, {'id': 'def'}, {'id': 'ghi'}],
            [{'id': None}, {'id': 'jkl'}, {'id': 'mno'}, {'id': 'pqr'}]]

您的語法適用於單個列表:

json_obj = [{'id': None}, {'id': 'abc'}, {'id': 'def'}, {'id': 'ghi'},
            {'id': None}, {'id': 'jkl'}, {'id': 'mno'}, {'id': 'pqr'}]

for d in json_obj:
    print(d['id'])

對於嵌套列表,可以使用標准庫中的itertools.chain.from_iterable

json_obj = [[{'id': None}, {'id': 'abc'}, {'id': 'def'}, {'id': 'ghi'}],
            [{'id': None}, {'id': 'jkl'}, {'id': 'mno'}, {'id': 'pqr'}]]

from itertools import chain

for d in chain.from_iterable(json_obj):
    print(d['id'])

或者,如果沒有導入,則可以使用嵌套的for循環:

for L in json_obj:
    for d in L:
        print(d['id'])

使用嵌套列表理解。

json_obj = [[{'id': None},{'id': '5b98d01c0835f23f538cdcab'},{'id': '5b98d0440835f23f538cdcad'},{'id': '5b98d0ce0835f23f538cdcb9'}],[{'id': None},{'id': '5b98d01c0835f23f538cd'},{'id': '5b98d0440835f23f538cd'},{'id': '5b98d0ce0835f23f538cdc'}]]
print( [[j["id"] for j in i] for i in json_obj] )

要么

for i in json_obj:
    for j in i:
        print(j["id"])

輸出:

[[None, '5b98d01c0835f23f538cdcab', '5b98d0440835f23f538cdcad', '5b98d0ce0835f23f538cdcb9'], [None, '5b98d01c0835f23f538cd', '5b98d0440835f23f538cd', '5b98d0ce0835f23f538cdc']]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM