首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python检查列表中的任何元素是否是字典中的键

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

Stack Overflow用户
提问于 2016-07-07 06:34:31
回答 4查看 15.3K关注 0票数 14

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

例如,我有一个水果列表:

代码语言:javascript
复制
fruits = ['apples', 'bananas', 'pears']

并想检查一下我的字典中是否有水果是关键,例如:

代码语言:javascript
复制
fruit_dict1 = {'apples': 4, 'oranges': 3, 'dragonfruit': 4} returns True

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

到目前为止,我已经:

代码语言:javascript
复制
def fruit_checker(list, dict):
    for fruit in list:
        if fruit in dict:
            return True
    return False

在“字典”中寻找水果感觉很奇怪,但似乎“在”中只搜索字典键。 "in“究竟是如何处理不同类型的?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-07-07 06:42:33

尝尝这个

代码语言:javascript
复制
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

工作

代码语言:javascript
复制
In [11]: [i in fruit_dict2 for i in fruits]
Out[11]: [False, False, False]

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

代码语言:javascript
复制
In [13]: any([True,False,False])
Out[13]: True
票数 17
EN

Stack Overflow用户

发布于 2016-07-07 06:39:00

让我们定义您的变量:

代码语言:javascript
复制
>>> fruits = ['apples', 'bananas', 'pears']
>>> fruit_dict1 = {'apples': 4, 'oranges': 3, 'dragonfruit': 4}
>>> fruit_dict2 = {'oranges': 3, 'dragonfruit': 9, 'pineapples': 4}

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

代码语言:javascript
复制
>>> bool(set(fruits).intersection(fruit_dict1))
True
>>> bool(set(fruits).intersection(fruit_dict2))
False

它是如何工作的

set(fruits)是一组水果。我们想找出这个集合和你字典中的一组键之间是否有重叠。要找出重叠是什么,我们可以使用交集方法:

代码语言:javascript
复制
>>> set(fruits).intersection(fruit_dict1)
set(['apples'])

若要将此转换为非空交集的True或空交集的False,我们将使用bool。

代码语言:javascript
复制
>>> bool(set(fruits).intersection(fruit_dict1))
True

微小变化

如果我们颠倒顺序,同样的原则是:

代码语言:javascript
复制
>>> bool(set(fruit_dict1).intersection(fruits))
True
>>> bool(set(fruit_dict2).intersection(fruits))
False
票数 7
EN

Stack Overflow用户

发布于 2016-07-07 06:35:58

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

代码语言:javascript
复制
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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38238861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档