python - 如何确定找到的两个键是否属于字典列表中的同一个字典
python - how to determine if two keys found belong to same dict from list of dicts
我有一个字典列表,我试图在其中找到两个键,如果找到,请确保它们属于同一个字典。我目前拥有的:
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 中缺少任何键的时间。
我有一个字典列表,我试图在其中找到两个键,如果找到,请确保它们属于同一个字典。我目前拥有的:
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 中缺少任何键的时间。