Итерация для создания объединения множеств

У меня есть словарь, содержащий наборы в качестве значений, и я хотел бы сделать объединение всех этих наборов, используя цикл 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 я распечатываю эти данные, и они не кажутся такими большими, как я ожидаю.

2 ответа

Решение

Это довольно наивный подход - создать набор результатов, перебрать значения dict и обновить набор результатов значениями, найденными в текущей итерации. |= это псевдоним для 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}

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

>>> 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}
Другие вопросы по тегам