繁体   English   中英

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': 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 = [('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”将引发异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM