Как l oop через json словарь внутри списка - PullRequest
0 голосов
/ 20 февраля 2020

Я занимаюсь веб-очисткой, и я получил данные в json объекте, который выглядит следующим образом:

{'categories': '[{"title":"Name", "desc":"Mike"}, {"title":"Food", "desc":"Muffin"}]'}

И я хочу l oop через этот словарь и просто получить одно значение " Сдоба». Мой код:

for item in the_dict:
    for i in range(0, len(item)-1):
        muff_filter = json.loads(the_dict['categories'])[i]['title']    
        if muff_filter == 'Food':
            print(json.loads(the_dict['categories'])[i]['desc'])
        else:
            pass  

Я получаю ожидаемый вывод, однако я получаю сообщение об ошибке:

Muffin
---------------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-50-9a650257d42a> in <module>
     61     for item in the_dict:
     62         for i in range(0, len(item)-1):
---> 63             food_filter = json.loads(the_dict['categories'])[i]['title']
     64             if food_filter == 'Food':
     65                 print(json.loads(the_dict['categories'])[i]['desc'])

IndexError: list index out of range

Я пытался перечислить список, но все равно получаю ту же ошибку, а также пытался использовать ключ, пара значений, но та же ошибка. Можете ли вы дать мне представление о том, что я не так думаю?

+++ Итак, я запустил% xmode Verbose в соответствии с предложением в комментарии, и я получил следующую ошибку:

Muffin
--------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-68-e1844b3cae82> in <module>
     61     for item in get_cert:
     62         for i in range(0, len(item)-2):
---> 63             the_dict= json.loads(the_dict['categories'])[i]['title']

        global get_cert = {'categories': '[{"title":"Name","desc":"Mike"},{"title":"Food","desc":"Muffin"}]'}
        global i = 2
     64             if muff_filter == 'Food':
     65                 print(json.loads(the_dict['categories'])[i]['desc'])

IndexError: list index out of range

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Если у вас есть несколько BLOB-объектов данных json в the_dict, выполните итерации по каждому BLOB-объекту:

for jsondata in the_dict.values(): 
    for d in json.loads(jsondata):
        if d.get('title') == 'Food':
            print(d['desc'])

или если вы знаете, что в the_dict имеется только один BLOB-объект данных json и он находится под ключом 'categories':

for d in json.loads(the_dict['categories']):
    if d.get('title') == 'Food':
        print(d['desc'])
0 голосов
/ 20 февраля 2020
for key, values in the_dict.items():
    jvalues = json.loads(values)
    for val in jvalues:
        muff_filter = json.loads(val)['title']    
        if muff_filter == 'Food':
            print(json.loads(val)['desc'])
        else:
            pass  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...