关于字典:Python dict.get(’key’)与dict [‘key’]

Python dict.get('key') versus dict['key']

本问题已经有最佳答案,请猛点这里访问。

为什么会引发keyerror:

1
2
d = dict()
d['xyz']

但这不是吗?

1
2
d = dict()
d.get('xyz')

我也很好奇描述符是否在这里起作用。


这就是如何定义get()方法的简单方法。

从python文档中:

Return the value for key if key is in the dictionary, else default. If default is not given, it defaults to None, so that this method never raises a KeyError.

默认的"未找到"返回值是None。您可以返回任何其他默认值。

1
2
d = dict()
d.get('xyz', 42)  # returns 42

括号访问没有默认值,但get方法有,默认值为None。从获取文件(通过a = dict(); help(a.get))

1
2
3
4
Help on built-in function get:

get(...)
    D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.


我相信你的开场白回答得很好,但我看不出有什么回应

I'm also curious if descriptors play a role here.

从技术上讲,描述符在这里起到了一定的作用,因为所有的方法都是用描述符隐式实现的,但是没有明确的显式描述符被使用,而且它们与你质疑的行为无关。


仅仅因为[1]键不在地图中,[2]这两个操作的性质不同。

从dict映射类型:

1
d[key]

用钥匙返回D项。如果键不在映射中,则引发keyError。

1
get(key[, default])

如果键在字典中,则返回键的值,否则为默认值。如果未给定默认值,则默认为无,因此此方法不会引发keyError。