如何根据维度列表动态生成对应取值的lambda表达式?
实现方法
分两种场景处理即可:
- 如果你是需要得到可直接运行的key函数(绝大多数业务场景都是这个需求),不需要拼接代码字符串,直接构造通用逻辑即可,支持任意长度的维度列表输入,行为和你写死的lambda完全一致:
def build_key_func(dimensions): return lambda x: tuple(x[dim] for dim in dimensions)
使用示例:
dimensions = ['dimension1', 'dimension2', 'dimension3'] key = build_key_func(dimensions) # 验证效果 test_data = {'dimension1': 'a', 'dimension2': 'b', 'dimension3': 'c'} print(key(test_data)) # 输出 ('a', 'b', 'c')
- 如果你是需要生成对应的lambda代码文本(比如做代码自动生成的场景),直接按格式拼接字符串即可:
def build_key_code(dimensions): accessor_part = ", ".join(f"x['{d}']" for d in dimensions) return f"key = lambda x: ({accessor_part})"
使用示例:
dimensions = ['dimension1', 'dimension2', 'dimension3'] print(build_key_code(dimensions)) # 输出结果:key = lambda x: (x['dimension1'], x['dimension2'], x['dimension3'])
注:你给出的目标示例代码里最后一个维度取值
x['dimension3]'缺失了闭合单引号,属于笔误,上面生成的是语法正确的代码。
内容的提问来源于stack exchange,提问作者mk2080
相关产品推荐
相关产品推荐

