如果它会覆盖一个键,是否有办法让dict理解引发异常?
例如,我希望以下内容出错:因为密钥'a'
有两个值:
>>> {k:v for k, v in ('a1', 'a2', 'b3')}
{'a': '2', 'b': '3'}
我意识到这可以通过for
循环来完成。有没有办法在保持理解语法的同时做到这一点?
答案 0 :(得分: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'))
这确实添加了辅助函数,但保持理解语法(合理地)完整。
答案 1 :(得分:13)
如果您不关心导致碰撞的密钥:
检查生成的字典是否具有len()
的适当大小。