我有两个字典:
length = {1: 3, 2: 9, 3: 1, 4: 1, 5: 0, 6: 0, 7: 5, 8: 0}
result = {1: 3.0, 2: 3.7416573867739413, 3: 7.874007874011811, 4: 6.4031242374328485, 5: 4.0, 6: 0.0, 7: 5.0, 8: 1.0}
当键匹配时,我需要将结果值除以长度值。因此,例如:
Key = 1: 3.0 / 3
Key = 2: 3.7416573867739413 / 9
etc
对于结果中的所有键。我尝试使用以下字典理解:
sims = {k:lengths[k] / v for k, v in result.items()}
但是我收到ZeroDivisionError: float division by zero
的错误
然后我试图避免理解丑陋的代码,并使用:
for dot_key, dot_val in result.items():
for length_key, length_val in lengths.items():
if dot_key == length_key:
try:
currVal = float(dot_val / length_val)
except ZeroDivisionError:
currVal = 0
cosine_sims = {dot_key:currVal}
print(cosine_sims)
但是我只得到Key = 8
的结果
{8: 0.0}
这些SO帖子指示您不能在理解中使用Try...Catch
,因此如何通过在两个不同的字典中使用相同的键将一个值除以另一个值来达到所需的结果?
您可以使用内联0
测试if
:
lengths[k] / v if v != 0 else 0
直接理解
最后一行,您正在覆盖字典。而是使用以下语法将其追加到字典中。
代替
cosine_sims = {dot_key:currVal}
使用
cosine_sims[dot_key]=currVal