首页 文章

访问列表里面的字典Pyhton

提问于
浏览
0

我有一个列表,其中包含这样的字典:

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

2 回答

  • 0

    使用嵌套列表理解 .

    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"])
    

    Output:

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

    你有一个嵌套的 list of lists . 它有时有助于明显地观察这一点,请注意嵌套的 [] 语法:

    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'])
    

相关问题