Python 3.6.3 KeyError

时间:2017-10-10 02:28:21

标签: python-3.6

我想在O(1)时间检查字典中是否存在元素,并在python3中使用“try / catch”块。当我尝试这样做时,我收到语法错误,我不确定原因:

try a_dict[i]:
    print(i) 
except KeyError:
    a_dict[i] = ... #some item

为简单起见,假设我有一个函数检查数组中的副本,我有这个函数正在使用上面的逻辑:

def hasDuplicate(a):
    a_dict = dict()
    for i in a:
        # logic from above
        try a_dict[i]:
            print(i) 
        except KeyError:
            a_dict[i] = True
        # end of logic from above
    return -1

我会在try语句的行上遇到语法错误。

我想避免使用in,因为它会检查O(N)时间。除非它在O(1)时间检查字典?任何帮助或反馈将不胜感激

3 个答案:

答案 0 :(得分:2)

  

我想避免使用in,因为它会检查O(N)时间。除非它在O(1)时间内检查字典?

确实如此。字典是一个专门的散列映射,因此包含检查是一个分摊的O(1)。

答案 1 :(得分:1)

语法应为:

def hasDuplicate(a):
    a_dict = dict()
    for i in a:
        # logic from above
        try:
            print(a_dict[i])
        except KeyError:
            a_dict[i] = True
        # end of logic from above
    return -1

从你提到"尝试/捕获"我猜你是来自Java? : - )

答案 2 :(得分:0)

我认为这是你想做的?如果你想找到Duplicate,就不需要使用try / catch。

def hasDuplicate(a):
    a_dict = dict()
    for i in a:
      # logic from above
      try:
        if a_dict[i]:
          print(i) 
      except KeyError:
        a_dict[i] = True
      # end of logic from above
    return -1


print(hasDuplicate([1, 2, 3, 4, 1])) //print duplicate value (i.e. 1 and will return -1)