Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在字典中使用关键字“in”时抛出键错误与搜索键错误_Python 3.x - Fatal编程技术网

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做同样的事情。