我有这个dict
dic = {'wow': 77, 'yy': 'gt', 'dwe': {'dwdw': {'fefe': 2006}}}
我有这个功能
def get_missing_key(data, nest, default_value):
try:
return data + nest
except KeyError as err:
return default_value
我是这样称呼它的:
get_missing_key(dic, ['dwe']['dwdw']['fefe'], 16)
我想要的是将第二个参数转换为普通的python表达式并用它进行计算
我想要这样
def get_missing_key(data, nest, default_value):
try:
return data['dwe']['dwdw']['fefe']
except KeyError as err:
return default_value
有没有办法做到这一点?
但我所拥有的显然不起作用,因为我无法将 dict
与 list
连接
答案 0 :(得分:2)
您可以像@kyle-parsons 那样使用 reduce,也可以手动循环:
lookup = ["dwe", "dwdw", "fefe"]
def find_missing(data, lookup, default):
found = data
for i in lookup:
try:
found = found[i]
except KeyError:
return default
return found
答案 1 :(得分:0)
您应该将密钥作为列表传递。
from functools import reduce
def get_missing_key(data, nest, default_value):
try:
reduce(dict.__getitem__, nest, data)
except KeyError:
return default_value
一般来说,Python 会急切地计算表达式,并且没有办法延迟传递要构建和exec
的代码字符串,但这确实不是一个好主意。