如果Python dict理解覆盖了一个键,则引发错误

Gar*_*rwe 19 python

如果它会覆盖一个键,有没有办法让dict理解引发异常?

例如,我希望以下错误,因为密钥有两个值'a':

>>> {k:v for k, v in ('a1', 'a2', 'b3')}
{'a': '2', 'b': '3'}
Run Code Online (Sandbox Code Playgroud)

我意识到这可以通过for循环来完成.有没有办法在保持理解语法的同时做到这一点?

orl*_*rlp 18

您可以使用具有辅助函数的生成器:

class DuplicateKeyError(ValueError): pass

def dict_no_dupl(it):
    d = {}
    for k, v in it:
        if k in d: raise DuplicateKeyError(k)
        d[k] = v
    return d

dict_no_dupl((k, v) for k, v in ('a1', 'a2', 'b3'))
Run Code Online (Sandbox Code Playgroud)

这确实添加了辅助函数,但保持理解语法(合理地)完整.


Kar*_*ath 13

如果您不关心哪个键导致了碰撞:

检查生成的dict是否具有适当的大小len().