python - 默认字典与字典的区别?
问题描述
我对以下代码的理解有疑问。我了解普通 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))
解决方案
该号码7
在您的列表中nums
,但不会自动出现在字典中。
该行
hash_table[i] += 1
查找i
in的值hash_table
,将其加一,然后更改 中的值hash_table
。但是如果是普通的字典,它不能查到7
in的值,因为从来没有加到字典里。hash_table
hash_table
7
使用 adefaultdict
时,代码可以工作,因为当它尝试在 中查找值7
时hash_table
,它发现7
尚未在其中hash_table
,因此它返回默认值,在本例中为0
。然后它添加1
到它,然后更改字典中的值。
推荐阅读
- angular - 服务返回多种类型的通用可观察对象(可能) - 无法订阅
- android - android Room数据库编辑器
- html - 通过 Bootstrap 导航栏。如何在移动或平板模式下将 NavBar 的组件放在右侧而不是左侧?
- c++ - 像 Unity 中的 OpenGL“自由纵横比”
- racket - 为什么球拍通过#
我的功能而不是状态? - java - Go Iterator 从 Bigquery 读取 100 万行,比 Java 或 kotlin 慢 10 倍?
- azure - AzureAD PowerShell - 如何读取 CountryCode、DistinguishedName、middleName、msExchRecipientDisplayType、msRTCSIP-Line 和其他属性
- django-rest-framework - 无法将带有数据的图像发送到序列化器
- arrays - 在结构中分配内存时出现不可预测的行为
- listview - 列表样式 SwiftUI