首页 > 解决方案 > 默认字典与字典的区别?

问题描述

我对以下代码的理解有疑问。我了解普通 dict 和 defaultdict 之间的区别,但我的问题是,使用下面的代码,当我用 dict() 或 {} 替换 defaultdict 时,我得到 7 的 KeyValue 错误(列表中的第一个数字) , 为什么是这样?

当然它不应该在调用时返回错误,因为 7 在列表中?谢谢

nums = [7,6,7,12]

class Solution:
    def singleNumber(self, nums):
        hash_table = defaultdict(int)      
                      
        for i in nums:
            hash_table[i] += 1       

        print(hash_table)

        for i in hash_table:
            if hash_table[i] == 1:         
                return i


x = Solution()
print(x.singleNumber(nums))

标签: pythondictionary

解决方案


该号码7在您的列表中nums,但不会自动出现在字典中。

该行 hash_table[i] += 1 查找iin的值hash_table,将其加一,然后更改 中的值hash_table。但是如果是普通的字典,它不能查到7in的值,因为从来没有加到字典里。hash_tablehash_table7

使用 adefaultdict时,代码可以工作,因为当它尝试在 中查找值7hash_table,它发现7尚未在其中hash_table,因此它返回默认值,在本例中为0。然后它添加1到它,然后更改字典中的值。


推荐阅读