#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)