【问题标题】: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 我确实做了一个诚实的尝试,我只是没有在帖子中详细说明。下次一定会来
  • 发布您自己的尝试有两个目的:它可能是可以解决的,如果没有其他问题,它证明您至少在提出问题之前自己已经付出了一些努力来解决问题。

标签: python python-3.x dictionary


【解决方案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'}

【讨论】:

    猜你喜欢
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 2014-03-11
    • 2014-10-22
    • 2017-04-22
    相关资源
    最近更新 更多