为了账号安全,请及时绑定邮箱和手机立即绑定

用于过滤嵌套 python 列表数据的列表理解

用于过滤嵌套 python 列表数据的列表理解

慕桂英4014372 2023-09-05 17:15:36
你好!问题:我想知道如何使用列表理解来根据 python 列表中的单词过滤掉某些结果,或者以其他方式从列表中仅提取我需要的包含某个“关键字”的行。概述:我正在使用 python 向 api 发出请求并收到了 json 请求。我已经使用 json.loads() 转换了 json,现在有一个我正在尝试使用的嵌套 python 列表:{"results": [        {            **"id": 12345678,**            "applicant": {                "id": 11342542,                "first_name": "Mary",                "last_name": "Johnson",                "email": "mjohnson@example.org"            },            "average_score": 42.0,            "collaborators": [],            "created_at": "2020-06-02T*****",            "current_stage": {                "id": 5057743,                "title": "Reviewing"            },            "custom_fields": [],            "decision": null,            **"labels": [{                    "id": 1124354,                    "name": "Jerusalem"                },                {                    "id": 132456,                    "name": "Testing Stuff"                }],**            "notes": [                {                    "id": 536590,                    "author": {                        "id": 3342356287,                        "first_name": "Brett",                        "last_name": "Wallace",                        "email": "bwallace@example.com"                    },我可以使用以下代码仅提取我需要的字段:for application in r['results']:        print(application['id'],application['labels'])我得到的东西看起来像这样:18318202 [{'id': 109135, 'name': 'Jerusalem'}, {'id': 109198, 'name': 'Testing Stuff'}]   11233443 [{'id': 109135, 'name': 'Nazareth'}, {'id': 109198, 'name': 'Age Requirement'}]有没有办法让我只返回 ['labels'] 字段中带有“Jerusalem”的值?换句话说,查看上面的示例,它只会返回第一行,因为第二行不包含耶路撒冷一词。我可以从数据中过滤此信息(条件打印语句)或将其提取到新列表中,但我无法弄清楚如何仅获取其中包含“耶路撒冷”的值。我找到的所有资源都讨论了如何加载和转换数据,但事后没有过滤掉。提前感谢任何人的时间和支持!
查看完整描述

1 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

filtered_data = [(application['id'], application['labels']) for application in  
                 r['results'] if 'Jerusalem' in
                 (item['name'] for item in application['labels'])]

也许这也会起作用

filtered_data = [(application['id'], application['labels']) for application in  
                 r['results'] if application['labels'][0]['name'] == 'Jerusalem']


查看完整回答
反对 回复 2023-09-05
  • 1 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信