python - 如何在python中动态创建return语句
问题描述
我的字典在下面
我正在字典中搜索下面的字典
test=[ { 'id': '1', 'name': 'A', 'businessArea': [ 'Accounting' ], 'Role': [ 'Developer' ], 'Designation': [ 'L2' ] }, { 'id': '2', 'name': 'B', 'businessArea': [ None ], 'Role': [ 'None' ], 'Designation': [ 'None' ] }, { 'id': '3', 'name': 'C', 'businessArea': [ 'Engineering' ], 'Role': [ 'Tester', 'Developer' ], 'Designation': [ 'L1' ] } ]
我的代码在下面工作正常,只返回一个
def contains(item, field, values):
if field:
item = item.get(field)
if item is None:
return None
if isinstance(item, str):
return item in values
if isinstance(item, list):
return any(contains(v, None, values) for v in item)
def validate(d):
return contains(d, 'businessArea', ['Accounting']) and contains(d, 'Designation', ['L2'])
result = [d for d in test if validate(d)]
print(result)
我得到了上述代码的一个输出,这是正确的
search_dict
会动态地来找我,所以我写了下面的代码,但我得到了完整的测试字典
search_dict = {'businessArea': ['Research'], 'Designation': ['L2']}
return_string = " and ".join([f"contains(d, '{k}', {v})" for k, v in search_dict .items()])
def contains(item, field, values):
if field:
item = item.get(field)
if item is None:
return None
if isinstance(item, str):
return item in values
if isinstance(item, list):
return any(contains(v, None, values) for v in item)
def validate(d):
return_string = " and ".join([f"contains(d, '{k}', {v})" for k, v in search_dict .items()])
#print (return_string)
return return_string
result = [d for d in test if validate(d)]
print(result)
我得到了不正确的完整字典。
任何类似的替代方法recursion
对我来说都很好。
我为什么要写第二个案例。我不想像contains
第一种情况那样手动编写排列和组合
解决方案
您可以使用all
来验证 dict 中的所有项目是否符合条件:
def validate(d):
return all(contains(d, k, v) for k, v in search_dict.items())
推荐阅读
- r - 如何获得R中分布的第n个百分位数?
- methods - 从继承的聚合中调用方法有问题
- vim - 在 tmux 中拆分保持相同的目录和相同的文件打开
- python - Python中二维网格的最近邻距离
- node.js - Nestjs:导入模块未定义,但可以导入模块中的方法和函数
- c# - 如何从滚动视图中删除两帧之间的距离
- python - 当我尝试提取文本并将其填充到文本文件中时,我的代码给了我错误“'JpegImageFile' object is not subscriptable”
- google-sheets - 将所有行设为相同的格式标准
- nginx - 如何使 Nginx 代理传递与外部请求一起工作到节点
- python - 检查字典列表中是否存在重复值并更新所述重复值