Python字典.get()方法在赋值与查找场景下的差异及报错疑问
字典.get()方法引发KeyError的原因分析
问题根源:不是.get()的问题,是下标访问[]的前置错误
你遇到的KeyError根本不是.get()方法导致的,而是在调用.get()之前,lookup[n]这一步已经触发了错误。
字典的**下标访问语法dict[key]**在键不存在时会直接抛出KeyError,而.get()方法正是用来避免这种情况的安全访问方式。但你在报错代码里,把lookup[n]作为.get()的第一个参数——当n是第一次出现时,lookup字典里还没有这个键,执行lookup[n]就会直接报错,.get()方法根本没机会执行。
对比两种用法的差异
报错的用法
if lookup.get(lookup[n], False) != True:
这里先执行lookup[n],如果n不在lookup中,直接触发KeyError,和.get()无关。
正常的用法
mapT[t[i]] = mapT.get(t[i], 0)
这里直接把t[i]作为键传给.get(),如果键不存在,.get()会返回默认值0,不会触发下标访问的错误,所以能正常运行。
修正后的代码
把lookup[n]换成n作为.get()的参数即可解决问题:
def containsDuplicate(self, nums: List[int]) -> bool: lookup = {} for n in nums: if not lookup.get(n, False): lookup[n] = True else: return True return False
内容的提问来源于stack exchange,提问作者sharif_17
相关产品推荐
相关产品推荐

