【问题标题】:How to handle exceptions in dictionary comprehension [duplicate]如何处理字典理解中的异常[重复]
【发布时间】:2019-10-01 03:09:34
【问题描述】:

我有两本词典:

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,那么如何通过在两个不同的字典中使用相同的键将一个值除以另一个值来获得所需的结果?

How to handle exceptions in a list comprehensions?

【问题讨论】:

  • 只需更改最后一行 cosine_sims[dot_key]=currVal
  • the last line 你能举个例子吗?

标签: python python-3.x dictionary dictionary-comprehension


【解决方案1】:

您可以使用内联 if 测试 0

lengths[k] / v if v != 0 else 0直接在推导式中

【讨论】:

  • 与我下面的答案相比,这是一个修复,这个答案解决了问题。这应该是公认的答案。
【解决方案2】:

最后一行,您正在覆盖字典。而是使用以下语法附加到字典。

代替

cosine_sims = {dot_key:currVal}

使用

cosine_sims[dot_key]=currVal 

【讨论】:

    猜你喜欢
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多