Python:使用f字符串隐藏json空键值

时间:2018-10-10 08:38:52

标签: python json f-string

我改进了my first Python program,使用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

它运作良好,但是(再次)我不知道当键没有值时(即,对于一种特定的引用,json文件中没有这样的键),我不知道如何从return语句中隐藏键值。 / p>

例如,某些科学引文中没有“ 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: 

使用publi函数中的 print 语句,我可以编写以下内容:

# Pubmed: ' if len(pbm)!=0 else "", pbm if len(pbm)!=0 else ""

有人知道如何使用 f-string 获得相同的结果吗?

感谢您的帮助。

PS:作为python初学者,仅阅读帖子Using f-string with format depending on a condition

,我就无法解决这个特定问题

2 个答案:

答案 0 :(得分:1)

您也可以在f字符串中使用条件表达式:

flutter upgrade

或者您可以简单地使用return f"{nom} {'(%s)' % dat if dat else ''}. {tit}. {jou}. {'Pubmed: ' + pbm if pbm else ''}" 运算符:

and

答案 1 :(得分:0)

一个简单但有点麻烦的解决方法是在字符串中使用格式修饰。

try:
    pbm = ". Pubmed: " + art['pubmedId_s']
except (KeyError, NameError):
    pbm = ""
...
print(f"{nom} ({dat}). {tit}. {jou}{pbm}")