基于条件在字典推导式中替换值:浮点转换并保留两位小数
解决方案
先看原始数据:
a = ('A','B','C') b = (45.43453453, 'Bad Val', 76.45645657 )
要实现需求,最简洁可靠的方式是借助try-except捕获浮点转换失败的场景,结合字典推导式完成处理:
方法1:用辅助函数(可读性更高)
def process_value(val): try: # 转成浮点数后保留两位小数 return round(float(val), 2) except (ValueError, TypeError): # 转换失败返回None return None # 生成目标字典 result = {k: process_value(v) for k, v in zip(a, b)} print(result)
方法2:直接嵌入推导式(更紧凑)
result = { k: round(float(v), 2) if isinstance(v, (int, float)) or (isinstance(v, str) and v.replace('.', '', 1).isdigit()) else None for k, v in zip(a, b) } print(result)
两种方法执行后都会得到目标输出:
{'A': 45.43, 'B': None, 'C': 76.46}
说明:
- 方法1通过
try-except能覆盖所有转换失败的情况(比如非数字字符串、其他不可转换类型),适用性更广; - 方法2通过类型判断和字符串校验实现,适合明确知道输入类型范围的场景;
round()函数会自动处理四舍五入,比如76.45645657会被转为76.46。
内容的提问来源于stack exchange,提问作者Pankaj Singh
相关产品推荐
相关产品推荐

