Доступ к словарю внутри списка Python - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть список, который содержит словари, подобные этому:

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

Для чтения идентификатора из словаряЯ пытался

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

Но я вижу эту ошибку с кодом выше:

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

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

У вас есть вложенный список списков .Иногда это заметно заметить, обратите внимание на вложенный синтаксис []:

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'])
0 голосов
/ 10 декабря 2018

Использование вложенного списка.

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']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...