python—如何从dict列表中确定找到的两个键是否属于同一dict
我有一个单子,我想在其中找到两个键,如果找到了,确保它们属于同一本词典。到目前为止,我所拥有的:python—如何从dict列表中确定找到的两个键是否属于同一dict,python,dictionary,Python,Dictionary,我有一个单子,我想在其中找到两个键,如果找到了,确保它们属于同一本词典。到目前为止,我所拥有的: foo = [{'apples': 1, 'banana': 2}, {'people': 1, 'monkeys': 2}] food = any(d['apples'] == 1 for d in foo) mammals = any(d['banana'] == 2 for d in foo) if food and mammals: return True 但是如何验证它们都来
foo = [{'apples': 1, 'banana': 2}, {'people': 1, 'monkeys': 2}]
food = any(d['apples'] == 1 for d in foo)
mammals = any(d['banana'] == 2 for d in foo)
if food and mammals:
return True
但是如何验证它们都来自同一本词典呢?第一次尝试很好,请尝试以下方法:
foo = [{'apples': 1, 'banana': 2}, {'people': 1, 'monkeys': 2}]
food = [('apples' in d and 'bannana' in d) for d in foo]
如果我理解您的口头描述,那么列表“foo”现在将包含项目“True”或“False”,指示每个字典是否同时包含两个键。要查看集合中的任何词典是否符合此要求,请使用“any”函数,如前所述:
contained_and_in_same_dic = any(food)
要利用惰性评估,我们可以从列表切换到生成器并编写:
contained_and_in_same_dic = any( (('apples' in d and 'bannana' in d) for d in foo) )
这里的优点是,它可以在找到匹配项后立即中断评估,尽管这只会在非常大的列表中出现
注意:您的解决方案与您的口头描述不匹配。如果根本找不到密钥,“if==1”将引发异常。只需同时检查两个密钥,则无需进行任何其他检查:
foo = [{'apples': 1, 'banana': 4}, {'people': 1, 'monkeys': 2}]
print(any(d.get('apples') == 1 and d.get('banana')== 2 for d in f))
简单地说:
return any(d.get('apples') == 1 and d.get('banana')== 2 for d in f)
目前,您实际上会得到一个
keyError
,您应该使用dict.get
来捕获每个dict中缺少的任何键 @Michael,别担心。