空字典Python中的KeyError

时间:2018-02-10 08:51:57

标签: python arrays algorithm dictionary data-structures

我正在做一个简单的任务:在Python中找到两个数组的交集。

我写了代码:

def intersect(nums1, nums2):
    """
    :type nums1: List[int]
    :type nums2: List[int]
    :rtype: List[int]
    """

    hash_2 = {}

    for x in nums2:
        if x in hash_2:
            hash_2[x] = 1
        else:
            hash_2[x] =  hash_2[x] + 1

    intersection = []

    for x in nums1:
        if x in hash_2:
            if hash_2[x] >0:
                intersection.append(x)
                hash_2[x] =  hash_2[x] - 1

    return intersection    

print(intersect([],[1]))

我明白了:

    line 14, in intersect
    hash_2[x] =  hash_2[x] + 1
KeyError: 1

我尝试过调试,但没有帮助。为什么python程序在字典本身为空时发送1到else条件?

这是Python语言中的一些问题,你不应该在空字典中搜索吗?

2 个答案:

答案 0 :(得分:2)

x1中的值不在hash_2中(因为hash_2为空),因此else分支被占用。由于x不在hash_2,因此您会KeyError尝试访问hash_2[x]

您希望测试成为if x not in hash_2

答案 1 :(得分:0)

我没有得到hash_2及其含义的观点,但如果你想计算两个序列的交集是一个解决方案:

def intersection(seq1, seq2):
    result = list()
    for item in seq1:
        if item in seq2:
            result.append(item)
    return result

def main():
    a = [10, 20, 30, 40, 'salam', 'bye', ['!', '*']]
    b = [10, 11, 23, 30, 'salam', 'not', ['!', '*']]
    print(intersection(a, b))

main()