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}
определить такую функцию, как
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)}
Поскольку 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}