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