基于另一个(部分)词典筛选词典列表



假设我有以下dict列表和一个dict

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";,基于";记录";三个键值对中只有两个?

输出将是

{"lang": "Python", "version": "3.8", "name": "Python 3.8"}
>>> 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'}

最新更新