检查列表中的任何元素是否是字典中的键的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“究竟是如何处理不同类型的?
发布于 2016-07-07 06:42:33
尝尝这个
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发布于 2016-07-07 06:39:00
让我们定义您的变量:
>>> 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发布于 2016-07-07 06:35:58
将遍历列表的生成器传递给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))
>> Falsehttps://stackoverflow.com/questions/38238861
复制相似问题