繁体   English   中英

Python检查列表中的任何元素是否是字典中的键

[英]Python check if any element in a list is a key in dictionary

什么是Pythonic方法来检查列表中的任何元素是否是字典中的键?

例如,我有一份水果清单:

fruits = ['apples', 'bananas', 'pears']

并且想要检查我的词典中的任何水果是否是关键,例如:

fruit_dict1 = {'apples': 4, 'oranges': 3, 'dragonfruit': 4} returns True

fruit_dict2 = {'oranges': 3, 'dragonfruit': 9, 'pineapples': 4} returns False

到目前为止,我有:

def fruit_checker(list, dict):
    for fruit in list:
        if fruit in dict:
            return True
    return False

在字典中查找水果感觉很奇怪,但似乎“在”中只搜索字典键。 “in”究竟如何与不同类型一起工作?

试试这个

In [1]: any([i in fruit_dict1 for i in fruits])
Out[1]: True
In [2]: any([i in fruit_dict2 for i in fruits])
Out[2]: False

工作

In [11]: [i in fruit_dict2 for i in fruits]
Out[11]: [False, False, False]

检查存在的每个元素。 并返回布尔值的列表, any将返回如果任何True是存在的。

In [13]: any([True,False,False])
Out[13]: True

让我们定义你的变量:

>>> fruits = ['apples', 'bananas', 'pears']
>>> fruit_dict1 = {'apples': 4, 'oranges': 3, 'dragonfruit': 4}
>>> fruit_dict2 = {'oranges': 3, 'dragonfruit': 9, 'pineapples': 4}

现在,让我们测试会员资格:

>>> bool(set(fruits).intersection(fruit_dict1))
True
>>> bool(set(fruits).intersection(fruit_dict2))
False

这个怎么运作

set(fruits)是一套水果。 我们想要查找此集与字典的键集之间是否有任何重叠。 要找到重叠的内容,我们可以使用交集方法:

>>> set(fruits).intersection(fruit_dict1)
set(['apples'])

要将此转换为True表示非空交集,或将False转换为空交集,我们使用bool

>>> bool(set(fruits).intersection(fruit_dict1))
True

微小的变化

如果我们颠倒顺序,原则相同:

>>> bool(set(fruit_dict1).intersection(fruits))
True
>>> bool(set(fruit_dict2).intersection(fruits))
False

将遍历列表的生成器传递给any

fruits = ['apples', 'bananas', 'pears']
fruit_dict1 = {'apples': 4, 'oranges': 3, 'dragonfruit': 4}

print(any(list_item in fruit_dict1 for list_item in fruits))
>> True

fruit_dict2 = {'oranges': 3, 'dragonfruit': 9, 'pineapples': 4}

print(any(list_item in fruit_dict2 for list_item in fruits))
>> False
set(fruits) & set(fruit_dict1.keys())

或使用柜台

from collections import Counter
any(Counter(fruits) & Counter(fruit_dict1.keys()))

暂无
暂无

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

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