【问题标题】:Replace Value on dict comprehension based on condition根据条件替换字典理解的值
【发布时间】:2022-11-23 07:04:56
【问题描述】:
a = ('A','B','C')
b = (45.43453453, 'Bad Val', 76.45645657 )
我想创建一个字典,非常简单:
{ k:v for k,v in zip(a,b) }
我的问题是,现在我想应用 float(如果可能的话)或用 None 替换它
所以,我想应用一轮 2,因此我的输出应该是:
{'A': 45.43, 'B': None, 'C': 76.46}
【问题讨论】:
标签:
python
dictionary
zip
rounding
【解决方案1】:
由于 round 引发 TypeError 每当某些东西没有实现 __round__ 时,这不可能直接使用字典理解,但您可以编写自己的函数以在其中使用。
def safe_round(val, decimals):
try:
return round(val, decimals)
except TypeError:
return None
a = ('A','B','C')
b = (45.43453453, 'Bad Val', 76.45645657 )
d = { k:safe_round(v, 2) for k,v in zip(a,b) }
{'A': 45.43, 'B': None, 'C': 76.46}
【解决方案2】:
定义一个函数
def try_round(n, d):
try:
return round(n, d)
except TypeError:
return None
接着
result = {k: try_round(v, 2) for k, v in zip(a, b)}