如何将整个语句作为函数参数传递? Python

时间:2021-07-24 14:49:19

标签: python list dictionary

我有这个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

有没有办法做到这一点?

但我所拥有的显然不起作用,因为我无法将 dictlist 连接

2 个答案:

答案 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 的代码字符串,但这确实不是一个好主意。