2016-05-20 2 views
1

У меня есть словарь, содержащий наборы как значения, и я хотел бы сделать объединение всех этих множеств, используя цикл for. Я пробовал использовать set.union() с циклом for, но я не думаю, что это работает, какие-либо простые способы сделать эту итерацию?Итерация для объединения множеств

for key in self.thisDict.keys(): 
     for otherKey in self.thisDict.keys(): 
      if otherKey!=key: 
       unionSet=set.union(self.thisDict[otherKey]) 

Проблема, я думаю, что у меня есть то, что я не делаю союз всех множеств. Я имею дело с большим количеством данных, поэтому трудно сказать. С созданием объекта unionSet, который я создаю, я распечатываю эти данные, и он не кажется таким большим, как я ожидаю, это будет

+1

Можете ли вы поделиться код, который вы пробовали и какие именно проблемы у вас есть с ним? – Mureinik

ответ

2

Это довольно наивный подход - создать результирующий набор, выполнить итерацию по значениям dict и обновить результат set со значениями, найденными в текущей итерации. |= - псевдоним для set.update метод.

d = {1: {1, 2, 3}, 2: {4, 5, 6}} 
result = set() 
for v in d.values(): 
    result |= v 

assert result == {1, 2, 3, 4, 5, 6} 
1

Простой набор понимание будет делать:

>>> d = {1: {1, 2, 3}, 2: {4, 5, 6}} 
>>> {element for value in d.values() for element in value} 
{1, 2, 3, 4, 5, 6} 

На мой взгляд, это более читаемым:

>>> from itertools import chain 
>>> set(chain.from_iterable(d.values())) 
{1, 2, 3, 4, 5, 6}