Как мне получить доступ к определенному значению во вложенном словаре Python?

#python #python-3.x #list #dictionary

#python #python-3.x #Список #словарь

Вопрос:

Я пытаюсь выяснить, как фильтровать словари, которые имеют статус «ожидание_delivery». Я не уверен, как это сделать (или если это невозможно). Я новичок в python и программировании. Я использую Python 3.8.5 в VS Code в Ubuntu 20.04. Приведенные ниже данные представляют собой созданные мной образцы данных, которые напоминают данные json из API. Любая помощь в том, как фильтровать «статус», была бы отличной. Спасибо.

 nested_dict = {
    'list_data': [
        {
            'id': 189530,
            'total': 40.05,
            'user_data': {
                'id': 1001,
                'first_name': 'jane',
                'last_name': 'doe'
            },
            'status': 'future_delivery'
        },
        {
            'id': 286524,
            'total': 264.89,
            'user_data': {
                'id': 1002,
                'first_name': 'john',
                'last_name': 'doe'
            },
            'status': 'awaiting_delivery'
        },
        {
            'id': 368725,
            'total': 1054.98,
            'user_data': {
                'id': 1003,
                'first_name': 'chris',
                'last_name': 'nobody'
            },
            'status': 'awaiting_delivery'
        },
        {
            'id': 422955,
            'total': 4892.78,
            'user_data': {
                'id': 1004,
                'first_name': 'mary',
                'last_name': 'madeup'
            },
            'status': 'future_delivery'
        }
    ],
    'current_page': 1,
    'total': 2,
    'first': 1,
    'last': 5,
    'per_page': 20
}

#confirm that nested_dict is a dictionary
print(type(nested_dict))

#create a list(int_list) from the nested_dict dictionary
int_list = nested_dict['list_data']

#confirm that int_list is a list
print(type(int_list))

#create the int_dict dictionary from the int_list list
for int_dict in int_list:
    print(int_dict)

#this is my attempt at filtering the int_dict dictionar for all orders with a status of awaiting_delivery
for order in int_dict:
    int_dict.get('status')
    print(order)
 

Вывод из терминала следует:

 <class 'dict'>
<class 'list'>
{'id': 189530, 'total': 40.05, 'user_data': {'id': 1001, 'first_name': 'jane', 'last_name': 'doe'}, 'status': 'future_delivery'}
{'id': 286524, 'total': 264.89, 'user_data': {'id': 1002, 'first_name': 'john', 'last_name': 'doe'}, 'status': 'awaiting_delivery'}
{'id': 368725, 'total': 1054.98, 'user_data': {'id': 1003, 'first_name': 'chris', 'last_name': 'nobody'}, 'status': 'awaiting_delivery'}
{'id': 422955, 'total': 4892.78, 'user_data': {'id': 1004, 'first_name': 'mary', 'last_name': 'madeup'}, 'status': 'future_delivery'}
id
total
user_data
status
 

Комментарии:

1. Я думаю, вам просто нужно: [item for item in nested_dict['list_data'] if item['status'] == 'awaiting_delivery']

2. print(order.get('status'))

Ответ №1:

Вы можете получить отфильтрованный список терминов, выполнив условное понимание списка в вашем списке терминов:

 # filter the data
list_data_filtered = [entry for entry in nested_dict['list_data']
                      if entry['status'] == 'awaiting_delivery']

# print out the results
for entry in list_data_filtered:
    print(entry)

# results
# {'id': 286524, 'total': 264.89, 'user_data': {'id': 1002, 'first_name': 'john', 'last_name': 'doe'}, 'status': 'awaiting_delivery'}
# {'id': 368725, 'total': 1054.98, 'user_data': {'id': 1003, 'first_name': 'chris', 'last_name': 'nobody'}, 'status': 'awaiting_delivery'}