首页 > 解决方案 > 测试多组成员资格的更好方法?

问题描述

我这里的代码很糟糕,有没有改进它的pythonic方法?

我有三套:

set1 = {1,2,3}
set2 = {2,3,4}
set3 = {4,5,6}

和一个组合集

combined = set1 | set2 | set3

我需要一个 dict 来返回每个集合是否有一个数字。

例如

d[2] = {'set1':True, 'set2':True, 'set3':False}

我的代码是这样的:

def in_set(num):
    d = {}
    if num in set1:
        d['set1'] = True
    else:
        d['set1'] = False

    if num in set2:
        d['set2'] = True
    else:
        d['set2'] = False

    if num in set3:
        d['set3'] = True
    else:
        d['set3'] = False

    return d

标签: python

解决方案


您可以通过以下方式简化此操作:

def in_set(num):
    return {
        'set1': num in set1,
        'set2': num in set2,
        'set3': num in set3
    }

您甚至可以制作映射到这些集合上的集合名称的字典,然后使用字典理解:

my_sets = {
    'set1': set1,
    'set2': set2,
    'set3': set3
}

def in_set(num):
    return {
        k: num in v
        for k, v in my_sets.items()
    }

在这里,我们可以轻松地更改集合(或它们的名称),从而例如使用更多/其他集合。


推荐阅读