使用Lambda提取和过滤嵌套字典数组

时间:2019-04-26 18:59:16

标签: python dictionary

我是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)

1 个答案:

答案 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'}]
}