Python 将两个三元运算符压缩为一个一行?

Python 将两个三元运算符压缩为一个一行?,python,Python,我正在分析多个包含重叠字段的CSV。我首先尝试检查正在解析的csv中是否存在字段,然后检查字典中是否存在该值。如果该值不存在,那么我想将该值附加到字典中,以便以后可以将所有唯一值写入单独的文件。 我需要减少这一点: if 'ZIPCODE' in row: ZipCode = row['ZIPCODE'].upper() else: ZipCode = ' ' 并针对三元运算符: ZipCode = row['ZIPCODE'].upper() if 'ZIPCODE' in row els

我正在分析多个包含重叠字段的CSV。我首先尝试检查正在解析的csv中是否存在字段,然后检查字典中是否存在该值。如果该值不存在,那么我想将该值附加到字典中,以便以后可以将所有唯一值写入单独的文件。 我需要减少这一点:

if 'ZIPCODE' in row: ZipCode = row['ZIPCODE'].upper()
else: ZipCode = ' ' 
并针对三元运算符:

ZipCode = row['ZIPCODE'].upper() if 'ZIPCODE' in row else ' '
第二个检查是Dict的if else:

FieldDict['ZipList'].append(ZipCode) if ZipCode not in FieldDict['ZipList'] else ' ' 
我的问题是,有没有办法将这两个比较合并成一个单独的陈述?或者,是否有更好的方法来检查csv和字典中的唯一性

****算出****

FieldDict['ZipList'].append(row['ZipCode'].upper()) if 'ZipCode' in row else ' ' if row['ZipCode'] not in FieldDict['ZipList'] else ' '
请参见Python:


模拟三元运算符的另一种方法是:

编辑:第二种方法无法工作,因为“ZIPCODE”可能不在行中,因此无法创建第一个列表并引发错误。这很愚蠢

正如马库斯所说,这是完美的解决这个问题

row.get('ZIPCODE', ' ').upper()

关于Kasra的评论,这里有一点
timeit
表明他是对的:

>>> timeit.timeit('["No", "Yes"][50 in range(100)]', number=1000000)
2.7500426138772203
>>> timeit.timeit('"Yes" if 50 in range(100) else "No"', number=1000000)
2.2611985253367393
你可以试试这个:

zipcode = row['ZIPCODE'].upper() if 'ZIPCODE' in row else ' '

第二个是个好主意,但我认为第一个有更多的性能,没有索引!第一个给了我一个“不能分配给操作员”错误,第二个给了我一个“在这两个
”之间的“was expecting one of…”[
@Delgan我收回它-我的语法不正确。@Kasra的确如此。而且,第二个不需要创建列表。@Delgan-不幸的是,我必须创建列表来存储一组唯一的Zipcode(如果Zipcode不存在,则仅添加Zipcode)稍后在我的代码中。但是,感谢大家,我还在这些语句中使用三元运算符。除非你们能想出一种方法将这两个检查浓缩成一个语句。我将编辑我的原始问题。你们是否尝试用谷歌搜索你们问题的标题?用Python搜索三元赋值。我喜欢这个:
row.get('ZIPCODE','').upper()
>>> timeit.timeit('["No", "Yes"][50 in range(100)]', number=1000000)
2.7500426138772203
>>> timeit.timeit('"Yes" if 50 in range(100) else "No"', number=1000000)
2.2611985253367393
zipcode = row['ZIPCODE'].upper() if 'ZIPCODE' in row else ' '