我正在解决我的问题的简单用例,这里是:
dic = {'a': 1, 'b': {'c': 2}}
现在我想要一个在这个字典上运行的方法,根据密钥获取值。
def get_value(dic, key):
return dic[key]
在不同的地方,将调用此泛型方法来获取值。
get_value(dic, 'a')
将有效。
是否可以更通用的方式获取值2 (dic['b']['c'])
。
答案 0 :(得分:6)
使用未绑定的方法dict.get
(或dict.__getitem__
)和reduce
:
>>> # from functools import reduce # Python 3.x only
>>> reduce(dict.get, ['b', 'c'], {'a': 1, 'b': {'c': 2}})
2
>>> reduce(lambda d, key: d[key], ['b', 'c'], {'a': 1, 'b': {'c': 2}})
2
<强>更新强>
如果您使用dict.get
并尝试访问不存在的密钥,则可以通过返回KeyError
隐藏None
:
>>> reduce(dict.get, ['x', 'c'], OrderedDict({'a': 1, 'b': {'c': 2}}))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: descriptor 'get' requires a 'dict' object but received a 'NoneType'
为防止这种情况发生,请使用dict.__getitem__
:
>>> reduce(dict.__getitem__, ['x', 'c'], OrderedDict({'a': 1, 'b': {'c': 2}}))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'x'