L oop через список и сравнить с вложенным dict. избегая KeyError - Python - PullRequest
0 голосов
/ 09 июля 2020

Я хотел бы сделать следующее:

До сих пор я дошел до следующего кода, но теперь застрял в том, как игнорировать этот День из будущих действий, выполняемых в l oop.

Если бы кто-то мог мне помочь, это было бы очень признательно !!

  • Обратите внимание, что я не могу удалить EU как регион, его нужно ввести в logi c, хотя ключ отсутствует во вложенном dict.

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Вот рабочее решение, проверьте обновленный ответ внизу.

Причина, по которой вы получаете ошибку «не удается объединить», заключается в том, что «nested_status» в некоторых итерациях равно «None», а вы попытался добавить к нему строку ('...' + None) в операторе печати. вы должны сначала проверить, имеет ли nested_status значение.

import datetime

dates = [datetime.datetime(2020, 7, 4, 0, 0), datetime.datetime(
    2020, 7, 6, 0, 0), datetime.datetime(2020, 7, 7, 0, 0)]

regions = ["SA", "CA", "EU"]

nested = {"SA": {"20200525": "H", "20201126": "C", "20201224": "H", "20200101": "C", "20201127": "C", "20200217": "C", "20200120": "C", "20200907": "C", "20200410": "C", "20200704": "C",
                 "20201225": "C"}, "CA": {"20200410": "C", "20200518": "C", "20200701": "C", "20200101": "C", "20201012": "C", "20201228": "C", "20201225": "C", "20200803": "C", "20200907": "C", "20200217": "C"}}

for region in regions:
    for d in dates:
        day = d.strftime("%Y%m%d")

        if (nested.get(region) or {}).get(day):
            print("Nested value found in {} ! {}".format(region, day))
        nested_status = (nested.get(region) or {}).get(day)
        if nested_status:
            if nested_status == 'C':
                continue                 #<-- skip this loop iteration if C
            print("{} status is: ".format(region) + nested_status)

, если вас не интересует «if nested_status == C», просто пропустите текущую итерацию даты.

if nested_status:
    if nested_status == 'C':
        continue                 #<-- skip this loop iteration if C
    print("{} status is: ".format(region) + nested_status)
0 голосов
/ 09 июля 2020

ошибка связана с вашим

print("{} status is: ".format(region) + nested_status)

nested_status имеет значение NullType, но оператор печати ожидает строку.

Вы можете попробовать что-то подобное, чтобы избежать 'NonTypes'

dict.get(key[, default])
example
dict.get(key, -1)

проверьте этот фрагмент и соответствующим образом измените свой код

print(nested)
nested['SA'].pop('20200525')
print(nested)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...