Python 3.x 在字典中使用关键字“in”时抛出键错误与搜索键错误
因此,我必须搜索字典中是否有键。从本帖: 我可以看出,检查这一点的预期方法是使用:Python 3.x 在字典中使用关键字“in”时抛出键错误与搜索键错误,python-3.x,Python 3.x,因此,我必须搜索字典中是否有键。从本帖: 我可以看出,检查这一点的预期方法是使用: if key in dict 但我的问题是,这样做是否更好: def appendToMyDict(key, value): try: old_value = dict[key] newValue = old_value + value dict[key] = newValue except KeyError: dict[key]
if key in dict
但我的问题是,这样做是否更好:
def appendToMyDict(key, value):
try:
old_value = dict[key]
newValue = old_value + value
dict[key] = newValue
except KeyError:
dict[key] = value
我的目的是尽可能优化获取密钥,因为我的密钥空间非常大,大约1000或以上
在我看来,字典就是散列图。因此,当我执行dict[key]时,python将对该键进行散列,并将在O1时间内获得其值。但是,在使用if key in dict方法搜索密钥时,需要花费时间[因为它将搜索整个密钥空间]
但是如果我抛出错误,抛出并捕获错误将需要O1+时间
我说的对吗?假设dict实际上是一本字典,那么dict中的key是O1。如果key in dict是开着的,为什么呢?为什么它不能散列该键并查看O1中是否有值,与dict[key]相同?如果我在列表中有if值,python会创建列表的散列映射,然后在O1时间内搜索它。因为如果是的话,为该列表创建一个完整的hashmap将是一个代价高昂的操作。所以我认为既然in关键字是一个通用关键字,它只需查看所有的键空间来检查键,为什么不使用.setdefault呢?例如:value=your_dict.setdefaultkey,“some_value”?我不明白设置默认值会有什么帮助,因为它不是一个明确的字典…任何键到我这里都是未知的,我不可能在时间之前知道传入的键必须有一个默认值。我理解正确吗?@Rash您似乎认为您知道使用dict[key]=某个值将其设置为什么值。。。它有什么不同呢?那么python是否首先检查它要迭代的对象是dict还是list,然后在此基础上搜索键?你能提供一些参考,我可以在那里阅读并确认这种行为吗?@Rash a dict实现了一个_getitem___)方法,当你使用dict[key]时会调用该方法,它使用散列,实际上是一个O1查找-肯定没有打开。哦,我现在看到了。我刚才还发现了这篇文章,证实了这种行为@Rash:implements在getitem中包含。我无法想象Python为什么不为dict做同样的事情。