Объединение словарных ключей в python, которые могут существовать или не существовать - PullRequest
0 голосов
/ 17 января 2020

У меня есть строка, которая анализируется, и сегменты загружаются в словарь. В зависимости от строки определенные ключи могут существовать или не существовать. Затем я хочу создать новую строку путем объединения указанных ключей c из словаря. У меня проблемы, потому что некоторые ключи могут отсутствовать. Я не хочу кучу беспорядочных if операторов, поэтому я пытаюсь использовать троичный оператор в моей конкатенации, но он не работает:

title = (name['title'], name['key1'] + (name['key2'] if name['key2'] else ''), name['key3'])
return ' '.join(title)

Я получаю KeyError: 'key3', когда ключ не не существует Я предполагаю, потому что он читает ключ, прежде чем проверяет, существует ли он. Я также пытался:

title = (name['title'], name['key1'] + (if name['key2']: name['key2']), name['key3'])

, но он даже не запускался из-за синтаксиса. Я просто пытаюсь заставить один ключ работать на данный момент, но будет больше, что нужно будет условно объединить, поэтому я пытаюсь найти чистый способ сделать это. Есть идеи?

Ответы [ 3 ]

3 голосов
/ 17 января 2020

Почему бы не использовать метод 'get'? name.get('keyX', '') вернет '', если keyX не является ключом. Таким образом, ваш код становится:

title = (name['title'], name['key1'] + (name.get('key2', ''), name.get('key3', ''))
return ' '.join(title)
1 голос
/ 17 января 2020
title = [name.get(key, '') for key in needed_keys]

вы можете попробовать это, просто нужно предоставить список ключей

0 голосов
/ 17 января 2020

Вы можете проверить, находится ли key2 в names.keys (), таким образом, нет отображаемой ошибки

title = (name['title'], name['key1'] + (name['key2'] if 'key2' in name.keys() else ''), name['key3'])
...