根据另一个(部分)字典过滤字典列表
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 或 pandas 根据包含字典列表的列过滤 DataFrame?