Как извлечь значения из словаря в словаре?

#python #python-3.x

Вопрос:

У меня есть словарь, созданный из JSON с использованием json.загружает:

JSON:

data_load = '{"parts": ["part1", "part2", "part3", "part4"], "part1": {"price": 3.99, "quantity": 32}, "part2": {"price": 7.98, "quantity": 2}, "part3": {"price": 14.32, "quantity": 4}, "part4": {"price": 0.5, "quantity": 0}}'

data_dict = json.loads(data_load)

data_dict {«детали»: [«деталь 1», «деталь 2», «деталь 3», «деталь 4»], «деталь 1»: {«цена»: 3,99, «количество»: 32}, «деталь 2»: {«цена»: 7,98, «количество»: 2}, «деталь 3»: {«цена»: 14,32, «количество»: 4}, «деталь 4»: {«цена»: 0,5, «количество»: 0}}

Я пытаюсь получить доступ к значению количества из части во вложенном словаре. Я пытаюсь сделать это вот так:

 quantities = [item['quantity'] for d_ in data_dict.values() for item in d_]  

но получите ошибку:

 Traceback (most recent call last):  File "lt;pyshell#71gt;", line 1, in lt;modulegt;  quantities = [item['quantity'] for d_ in data_dict.values() for item in d_]  File "lt;pyshell#71gt;", line 1, in lt;listcompgt;  quantities = [item['quantity'] for d_ in data_dict.values() for item in d_] TypeError: string indices must be integers  

Что я делаю не так? Заранее спасибо!

Ответ №1:

Это ответ на ваш вопрос:

 quantities = [data_dict[p]['quantity'] for p in data_dict.get('parts')]  

Ответ №2:

В настоящее время ваш код возвращает список, который выглядит следующим образом:

 ['part1', 'part2', 'part3', 'part4', 'price', 'quantity', 'price', 'quantity', 'price', 'quantity', 'price', 'quantity']  

Приведенный ниже код извлекает количество, если текущий элемент в итерации понимания списка является словарем:

 import json   data_load = '{"parts": ["part1", "part2", "part3", "part4"], "part1": {"price": 3.99, "quantity": 32}, "part2": {"price": 7.98, "quantity": 2}, "part3": {"price": 14.32, "quantity": 4}, "part4": {"price": 0.5, "quantity": 0}}'  data_dict = json.loads(data_load)  quantities = [d_["quantity"] for d_ in data_dict.values() if isinstance(d_, type({}))]  print(quantities)