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

2024-10-04 07:31:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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)上的键,并从subdict(workflowId)中提取键

 {'executionInfos': [
    {
      'workflowId': 'TestWf1',
      'executionStatus': OPEN',
    },
    {
      'workflowId': 'TestWf2',
      'executionStatus': OPEN',
    }
  ]
}

我知道它可以用if-else条件和循环来完成,但是我想知道如何使用lambda/或任何一个两行程序来完成。我试着在下面用力工作

KEYS_TO_FILTER = ['executionStatus','workflowId']
res2 = map(lambda attr: attr.keys(), response["executionInfos"])
res3 = filter(lambda attr: attr in KEYS_TO_FILTER, res2)

Tags: lambdafalsedatetime字典openattrexecutiontzinfo
1条回答
网友
1楼 · 发布于 2024-10-04 07:31:54

你可以创建一个新的空字典,然后使用列表理解。以下是不使用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'}]
}

相关问题 更多 >