2016-05-20 2 views
1

J'ai un dictionnaire contenant des ensembles comme valeurs, et je voudrais faire une union de tous ces ensembles en utilisant une boucle for. J'ai essayé d'utiliser set.union() avec une boucle for mais je ne pense pas que cela fonctionne, des moyens simples pour faire cette itération?Itération pour former une union de séries

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

Le problème que je crois avoir est que je ne fais pas une union de tous les ensembles. Je traite beaucoup de données, donc c'est difficile à dire. Avec l'objet unionSet que je crée, j'imprime ces données et il ne semble pas aussi grand que je le souhaite

+1

Pouvez-vous partager le code que vous avez essayé et ce problème exact vous avez avec? – Mureinik

Répondre

2

C'est une approche assez naïve - créer un ensemble de résultats, parcourir les valeurs dict et mettre à jour le résultat défini avec les valeurs trouvées dans l'itération en cours. |= est un alias pour la méthode 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

Une compréhension simple jeu fera:

>>> 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} 

A mes yeux, cela est plus facile à lire:

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