Как выполнить множество назначений переменных из JSON, и если ключевая ошибка назначит None и выполнить все остальное в python

Я пытаюсь получить значения из файла JSON и сохранить его в словаре Python.

Я хочу присвоить значения для того, что когда-либо было доступно из ключей, которые я даю, и для тех, которые недоступны, я хочу сохранить как «Нет»

Я попробовал следующее,

try:
    dataDict['syn']= results['synonyms']
    dataDict['reactivity']= results['crossReactivity']
    dataDict['Temp']= results['storageTemp']
    dataDict['catNum']= results['catalogNum']
    dataDict['shipping']= results['shippingInstructions']
except KeyError as e:
    dataDict[e.args[0]] = "None"
sa = f"""
        synonyms: {dataDict['syn']}
        crossReactivity: {dataDict['reactivity']}
        storageTemp: {dataDict['Temp']}
        catalogNum: {dataDict['catNum']}
        shippingInstructions: {dataDict['shipping']}
        """
print (sa) 

Я получаю следующий вывод,

synonyms: None
crossReactivity:
storageTemp:
catalogNum:
shippingInstructions:

Если «синонимы» недоступны в файле JSON, «Нет» назначается dataDict['syn'], но остальные операторы игнорируются.

Как выполнить остальные задания, не записывая все в отдельные попытки и исключения?

сначала я вижу ( в вашем коде перед результатами - это нужно? тогда я бы написал это в цикле. нравится if data availible поместите это в диктофон else не поместите ни одного.

grumpyp 24.12.2020 10:13

вы должны использовать dict.get(key, default_value)

furas 24.12.2020 10:16

Отвечает ли это на ваш вопрос? Вернуть None, если ключ словаря недоступен

Tomerikoo 24.12.2020 10:18

(была ошибка копирования и вставки, я исправил ее. Мне нужно получить около 54 значений, подобных этому. Так есть ли какой-либо другой способ написания кода или автоматизации вместо написания операторов if-else или try-за исключением всех 54 чехлы? Спасибо.

Guru 24.12.2020 10:19

@Guru Здесь и в приведенной выше ссылке вы найдете общее количество 13 ответов на этот вопрос. Вам никто из них не помог?

Tomerikoo 24.12.2020 10:24

@Tomerikoo частично ответил. Для извлечения каталожного номера, если мне нужно написать results['response']['docs'][0]['catalogNum'], так как это dict dicts, как мне использовать его с .get()?. Извините, если это глупый вопрос. Спасибо.

Guru 24.12.2020 10:43
stackoverflow.com/a/65385965/10367459 ответил на мой предыдущий комментарий.
Guru 24.12.2020 11:11
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
7
104
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать .get(), которая принимает значение по умолчанию:

dataDict = {}
results = {"synonyms": "foo", "storageTemp": 15}

dataDict['syn'] = results.get('synonyms', None)
dataDict['reactivity'] = results.get('crossReactivity', None)
dataDict['Temp'] = results.get('storageTemp', None)
dataDict['catNum'] = results.get('catalogNum', None)
dataDict['shipping'] = results.get('shippingInstructions', None)

print(dataDict)

Вне:

{'shipping': None, 'catNum': None, 'reactivity': None, 'syn': 'foo', 'Temp': 15}

Извините, если это нубский вопрос, так как это файл JSON, данные находятся в dict of dicts и dict of list of dicts, все смешано. Итак, как мне написать для этого запроса «результаты ['response']['docs'][0]['catalogNum']" с помощью .get()?

Guru 24.12.2020 10:33

(stackoverflow.com/a/65385965/10367459) ответил на мой предыдущий комментарий.

Guru 24.12.2020 11:13

Другие вопросы по теме