我是python的新手,我正在寻找一个lambda解决方案来提取带有字典的字典以及过滤选定的键。
示例:我的输入如下所示
{'executionInfos': [
{
'cancelRequested': False,
'execution': {'runId': 22CXalf3g9xdl7kts45gaagL0SdEYMTqockoag4LaBDc=',
'workflowId': 'TestWf1'},
'executionStatus': 'OPEN',
'startTimestamp': datetime.datetime(2019, 4, 25, 17, 1, 8, 585000, tzinfo=tzlocal()),
'workflowType': {'name': 'Test',
'version': '1.0'}
},
{
'cancelRequested': False,
'execution': {'runId': 22NwIvCxrizJQescq7rLILHtMl9ktxj343DC7unUq2GK7M=',
'workflowId': TestWf2'},
'executionStatus': 'OPEN',
'startTimestamp': datetime.datetime(2019, 4, 12, 14, 19, 13, 837000, tzinfo=tzlocal()),
'workflowType': {'name': 'Test',
'version': 1.0'}
}
]
}
我想获得一个dict数组,在这里我可以过滤每个dict(executionStatus)上的键并从子dict(workflowId)中提取键
{'executionInfos': [
{
'workflowId': 'TestWf1',
'executionStatus': OPEN',
},
{
'workflowId': 'TestWf2',
'executionStatus': OPEN',
}
]
}
我知道这可以通过其他条件和循环来完成,但想知道如何使用lambda /或任何一两个内衬来完成。我在下面尝试并努力工作
KEYS_TO_FILTER = ['executionStatus','workflowId']
res2 = map(lambda attr: attr.keys(), response["executionInfos"])
res3 = filter(lambda attr: attr in KEYS_TO_FILTER, res2)
答案 0 :(得分:1)
您可以只创建一个新的空缺字典,然后使用列表理解。这是不使用lambda函数的解决方案:
d = {'executionInfos': [...]}
d_ = {}
d_['executionInfos'] = [{'workflowId' : k['execution']['workflowId'], 'executionStatus' : k['executionStatus']} for k in d['executionInfos']]
输出:
{'executionInfos': [
{'workflowId': 'TestWf1', 'executionStatus': 'OPEN'},
{'workflowId': 'TestWf2', 'executionStatus': 'OPEN'}]
}