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

你好!


问题:我想知道如何使用列表理解来根据 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”的值?换句话说,查看上面的示例,它只会返回第一行,因为第二行不包含耶路撒冷一词。我可以从数据中过滤此信息(条件打印语句)或将其提取到新列表中,但我无法弄清楚如何仅获取其中包含“耶路撒冷”的值。我找到的所有资源都讨论了如何加载和转换数据,但事后没有过滤掉。提前感谢任何人的时间和支持!


慕桂英4014372
浏览 105回答 1
1回答

温温酱

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']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python