1

基本上,这始于我在尝试查找字典中是否存在索引时遇到的问题:

if collection[ key ]: # if exist
    #do this
else: # if no exist
    #do this

但是当索引真的不存在时,它会给我一个 KeyError。因此,阅读 Python 文档。如果缺少() 被定义,它不会抛出KeyError

collection = {}
def collection.__missing__():
    return false

终端上的上述代码给了我:

ghelo@ghelo-Ubuntu:~/Music$ python __arrange__.py
  File "__arrange__.py", line 16
    def allArts.__missing__():
               ^
SyntaxError: invalid syntax

那么,如何正确地做到这一点呢?顺便说一句,我将需要在此使用 Python 2.7。在 Python 3 上运行时有区别吗?

4

4 回答 4

6

这就是你的做法:

if key in collection:

或者,正如@sdolan 所建议的那样,您可以使用该.get方法,如果它不存在,它将返回一个默认值(可选的第二个参数)。

if collection.get(key, None):

如果你想使用__missing__它,你可以将它应用到一个扩展 dict 的类(在这种情况下):

class collection(dict):

    def __missing__(self, key):
        print "Too bad, {key} does not exist".format(key=key)
        return None


d = collection()
d[1] = 'one'

print d[1]

if d[2]:
    print "Found it"

输出

one
Too bad, 2 does not exist
于 2012-08-18T06:27:26.510 回答
0

几个答案已经显示了您在真实情况下可能应该做的事情,但是缺少也可以做您所询问的事情。

如果你想使用它,你需要继承 dict。

class mydict(dict):
  def __missing__(self, key):
    return 'go fish'

然后你可以创建一个:

d = mydict()

并使用

d[0]
=> 'go fish'
d[0] = 1
d[0]
=> 1
于 2012-08-18T06:37:28.970 回答
0

您可以通过使用 try..except 处理 KeyError 异常来检查 key 是否存在,如下所示。

try:
    collection[key]
    # do this
except KeyError:
    # do that

这种编码风格被称为EAFP“请求宽恕比请求许可更容易” http://docs.python.org/glossary.html#term-eafp

另一种方法是使用get如果找不到密钥,默认返回 None的方法

if collection.get(key) is not None:
    # do this
else:
    # do that
于 2012-08-18T06:29:08.110 回答
0

您可以使用 if selection.has_key(keylookingfor)。

于 2012-08-18T19:23:21.937 回答