如果在第二个 dicts 列表(在 python 中)中找不到 id,如何从列表中分离 dicts?

我有两个字典列表


list1 = 

[

    {"name": "Maria", 

    "id": "16a", 

    }, 

    {"name": "Tania", 

    "id": "13b", 

    },

    {"name": "Steve", 

    "id": "5a", 

    }

]



list2 = 

[

    {"name": "Eric", 

    "id": "16a", 

    }, 

    {"name": "Mike", 

    "id": "7b", 

    },

    {"name": "Steve", 

    id: "57a", 

    }

]

如果在 list1 中找不到相同的 id,我希望能够从 list2 返回一个 dicts 列表


例如,它应该返回


[

    {"name": "Mike", 

    "id": "7b", 

    },

    {"name": "Steve", 

    "id": "57a", 

    }

]

我在这里尝试了一些关于堆栈溢出的建议,但没有得到正确的解决。


梦里花落0921
浏览 163回答 3
3回答

守着一只汪

使用遍历list2检查idwith ids in的列表理解list1:list1 = [    {'name': "Maria",     'id': "16a",     },     {'name': "Tania",     'id': "13b",     },    {'name': "Steve",     'id': "5a",     }]list2 = [    {'name': "Eric",     'id': "16a",     },     {'name': "Mike",     'id': "7b",     },    {'name': "Steve",     'id': "57a",     }]list1_ids = [y['id'] for y in list1]result = [x for x in list2 if x['id'] not in list1_ids]# [{'name': 'Mike', 'id': '7b'}, {'name': 'Steve', 'id': '57a'}]

汪汪一只猫

这应该做:[d2 for d2 in list2 if d2['id'] not in [d1['id'] for d1 in list1]]输出:[{'id': '7b', 'name': 'Mike'}, {'id': '57a', 'name': 'Steve'}]

缥缈止盈

您也可以使用filter功能来做到这一点:list1 = [    {"name": "Maria",     "id": "16a",     },     {"name": "Tania",     "id": "13b",     },    {"name": "Steve",     "id": "5a",     }]list2 = [    {"name": "Eric",     "id": "16a",     },     {"name": "Mike",     "id": "7b",     },    {"name": "Steve",     "id": "57a",     }]IDs = set(value["id"] for value in list1)output = list(filter(lambda elem: elem["id"] not in IDs, list2))print(output)输出:[{'name': 'Mike', 'id': '7b'}, {'name': 'Steve', 'id': '57a'}]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python