如何使用生成器表达式合并Python中的多个集合?

Cat*_*ami 2 python set

我想加入从类的实例获得的多个集合。下面是我正在使用的内容和尝试过的示例。改变班级不是一个选择。

class Salad:
   def __init__(self, dressing, veggies, others):
      self.dressing = dressing
      self.veggies = veggies
      self.others = others

SALADS = {
   'cesar'  : Salad('cesar',  {'lettuce', 'tomato'},  {'chicken', 'cheese'}),
   'taco'   : Salad('salsa',  {'lettuce'},            {'cheese', 'chili', 'nachos'})
}
Run Code Online (Sandbox Code Playgroud)

我想OTHER_INGREDIENTS成为{'chicken', 'cheese', 'chili', 'nachos'}。所以我尝试:

OTHER_INGREDIENTS = sum((salad.others for salad in SALADS.values()), set())
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误“+ 不支持的操作数类型:‘set’和‘set’。我该怎么做?

如果可能的话,我更愿意使用 Python 2.7,而不需要额外的导入。

L3v*_*han 7

您可以使用集合理解:

OTHER_INGREDIENTS = {
    element
    for salad in SALADS.values()
    for element in salad.others
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*ejo 6

您可以使用集合中的函数 union:

OTHER_INGREDIENTS = set().union(*(salad.others for salad in SALADS.values()))
Run Code Online (Sandbox Code Playgroud)

输出

{'chili', 'cheese', 'chicken', 'nachos'}
Run Code Online (Sandbox Code Playgroud)