Python: скрытие значений пустых ключей json с помощью f-строки
Я улучшил свою первую программу на Python, используя f-строки вместо print:
....
js = json.loads(data)
# here is an excerpt of my code:
def publi(type):
if type == 'ART':
return f"{nom} ({dat}). {tit}. {jou}. Pubmed: {pbm}"
print("Journal articles:")
for art in js['response']['docs']:
stuff = art['docType_s']
if not stuff == 'ART': continue
tit = art['title_s'][0]
nom = art['authFullName_s'][0]
jou = art['journalTitle_s']
dat = art['producedDateY_i']
try:
pbm = art['pubmedId_s']
except (KeyError, NameError):
pbm = ""
print(publi('ART'))
Эта программа извлекает данные через файлы json для создания научных ссылок:
# sample output: J A. Anderson (2018). Looking at the DNA structure, Nature. PubMed: 3256988
Это работает хорошо, за исключением того, что (опять же) я не знаю, как скрыть значения ключей из оператора return, когда ключи не имеют значения (т. Е. В файле json такого ключа нет для одной конкретной цитаты).
Например, некоторые из научных цитат не имеют ключа / значения "Pubmed" (pmd). Вместо того, чтобы печатать "Pubmed: " с пустым значением, я хотел бы избавиться от них обоих:
# Desired output (when pbm key is missing from the JSON file):
# J A. Anderson (2018) Looking at the DNA structure, Nature
# NOT: J A. Anderson (2018) Looking at the DNA structure, Nature. Pubmed:
Используя оператор print в функции publi, я мог бы написать следующее:
# Pubmed: ' if len(pbm)!=0 else "", pbm if len(pbm)!=0 else ""
Кто-нибудь знает, как получить такой же результат, используя f-строку?
Спасибо за вашу помощь.
PS: Как начинающий Python, я не смог бы решить эту конкретную проблему, просто читая пост Использование F-строки с форматом в зависимости от условия
2 ответа
Вы также можете использовать условное выражение в f-строке:
return f"{nom} {'(%s)' % dat if dat else ''}. {tit}. {jou}. {'Pubmed: ' + pbm if pbm else ''}"
или вы можете просто использовать and
оператор:
return f"{nom} {dat and '(%s)' % dat}. {tit}. {jou}. {pbm and 'Pubmed: ' + pbm}"
Простой, но немного неуклюжий обходной путь - иметь декорации форматирования в строке.
try:
pbm = ". Pubmed: " + art['pubmedId_s']
except (KeyError, NameError):
pbm = ""
...
print(f"{nom} ({dat}). {tit}. {jou}{pbm}")