Python: как проверить следующий индекс в списке, если исключение происходит в текущем индексе списка Python - PullRequest
1 голос
/ 28 сентября 2019

Я пробую простой код на python, где у меня есть список словарей, и я буду фильтровать значение по ключу среди словарей.

Мой список словарей такой:

Mylist = [
{"data": "two.mail-in.daimler.com.", "ttl": 3600, "type": "MX"},
{"data": "two.mail-in.daimler.com.", "ttl": 3600},
{"data": "two.mail-in.daimler.com.", "ttl": 3600, "type": "A"},
]

Я хочу извлечь словарь, в котором пара ключ-значение имеет вид «тип»: «A». Для этого я использую код операции:

a = list(filter(lambda type: type['type'] == 'A', Mylist))

Нетпроблема с этим кодом.Дело в том, что 2-й словарь не имеет ключа с именем «Тип», поэтому он генерирует исключение KeyError, и программы останавливаются без проверки 3-го словаря или 2-го индекса списка.

То, что я хочу, эточтобы игнорировать ошибку ключа во 2-м словаре, проверить 3-й словарь и распечатать словарь, который имеет значение ключа "type" = "A"

Поэтому я попытался использовать try / исключением.

Mylist = [

{"data": "two.mail-in.daimler.com.", "ttl": 3600, "type": "MX"},
{"data": "two.mail-in.daimler.com.", "ttl": 3600},
{"data": "two.mail-in.daimler.com.", "ttl": 3600, "type": "A"},
]

IP_Data =[]
for dicti in Mylist:

    try:
        a = list(filter(lambda type: type['type'] == 'A', Mylist))
        IP_Data.append(a)

    except:
        continue
print(IP_Data)

input()       

Я сделал результат хранения в другом списке с именем IP_Data.когда я запускаю код, я получаю результат в виде пустого массива, т. е. [] Может кто-нибудь сказать мне, почему, почему это происходит, и любой способ сделать весь словарь хранить внутри массива, значение ключа которого равно type = A

ps Я также пытался пройти вместо продолжения, но у меня все та же проблема.

Спасибо.

Ответы [ 3 ]

1 голос
/ 28 сентября 2019

Используйте метод dict.get() в словаре, чтобы избежать случаев, когда в словаре нет этого конкретного ключа, вы можете установить значение по умолчанию, если ключ не существует в словаре.Попробуйте это:

Mylist = [
{"data": "two.mail-in.daimler.com.", "ttl": 3600, "type": "MX"},
{"data": "two.mail-in.daimler.com.", "ttl": 3600},
{"data": "two.mail-in.daimler.com.", "ttl": 3600, "type": "A"},
]
a = list(filter(lambda type: type.get('type', None) == 'A', Mylist))

Вывод :

[{'data': 'two.mail-in.daimler.com.', 'ttl': 3600, 'type': 'A'}]
0 голосов
/ 28 сентября 2019

Не переопределяйте встроенную функцию type, вместо того, чтобы явно пытаться получить ключ словаря, попробуйте использовать dictionary.get('key', None), и таким образом вы не получите ошибку ключа.

0 голосов
/ 28 сентября 2019

Вместо использования ключа для доступа к значению в коде

a = list(filter(lambda type: type['type'] == 'A', Mylist))

Вы можете изменить свой код для использования метода .get объекта словаря.

a = list(filter(lambda type: type.get('type','') == 'A', Mylist))

Здесь,если ключ 'type' не существует, вы можете передать значение по умолчанию в качестве второго аргумента, который в этом случае я передал как "" (пустая строка)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...