根据另一个(部分)字典过滤字典列表

Posted

技术标签:

【中文标题】根据另一个(部分)字典过滤字典列表【英文标题】:Filtering List of Dictionaries based on Another (Partial) Dictionary 【发布时间】:2022-01-19 23:25:11 【问题描述】:

假设我有以下字典列表和一个字典

dicts = [
    "lang": "Java", "version": "14", "name": "Java 14",
    "lang": "Python", "version": "3.8", "name": "Python 3.8",
    "lang": "C++", "version": "17", "name": "C++ 17",
]
record = 'lang': 'Python', 'version': '3.8'

如何在“dicts”中找到“record”,基于“record”只有三个键值对中的两个?

输出将是

"lang": "Python", "version": "3.8", "name": "Python 3.8"

【问题讨论】:

我没有downvote your question because no attempt was made,因为您是新贡献者,但通常我们希望您至少创建一个honest attempt at the solution,然后然后提出具体问题( s) 关于你的实施。 @martineau 我确实做了一个诚实的尝试,我只是没有在帖子中详细说明。下次一定会来 发布您自己的尝试有两个目的:它可能是可以解决的,如果没有其他问题,它证明您至少在提出问题之前自己已经付出了一些努力来解决问题。 【参考方案1】:
>>> dicts = [
    "lang": "Java", "version": "14", "name": "Java 14",
    "lang": "Python", "version": "3.8", "name": "Python 3.8",
    "lang": "C++", "version": "17", "name": "C++ 17",
]
>>> record = 'lang': 'Python', 'version': '3.8'
>>> [d for d in dicts if all(d[k] == v for k, v in record.items())]
['lang': 'Python', 'version': '3.8', 'name': 'Python 3.8']

如果您确定只有一个匹配项(或者您只关心获得一个而不关心哪个),您可以使用生成器表达式调用next

>>> next(d for d in dicts if all(d[k] == v for k, v in record.items()))
'lang': 'Python', 'version': '3.8', 'name': 'Python 3.8'

【讨论】:

以上是关于根据另一个(部分)字典过滤字典列表的主要内容,如果未能解决你的问题,请参考以下文章

python根据键值过滤字典列表

C#根据类属性过滤类列表字典

如何使用 python 或 pandas 根据包含字典列表的列过滤 DataFrame?

如何从列表中的多个字典附加到具有“内部”字典特定部分的另一个列表?

python字典列表过滤器

python字典列表过滤器