更好的方法来测试多个成员资格?

max*_*max 3 python

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

我有三套:

set1 = {1,2,3}
set2 = {2,3,4}
set3 = {4,5,6}
Run Code Online (Sandbox Code Playgroud)

和一个组合集

combined = set1 | set2 | set3
Run Code Online (Sandbox Code Playgroud)

我需要一个dict来返回是否每个都设置了一个数字.

例如

d[2] = {'set1':True, 'set2':True, 'set3':False}
Run Code Online (Sandbox Code Playgroud)

我的代码是这样的:

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
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 6

您可以通过以下方式简化:

def in_set(num):
    return {
        'set1': num in set1,
        'set2': num in set2,
        'set3': num in set3
    }
Run Code Online (Sandbox Code Playgroud)

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

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

def in_set(num):
    return {
        k: num in v
        for k, v in my_sets.items()
    }
Run Code Online (Sandbox Code Playgroud)

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