2

値としてセットを含む辞書があり、for ループを使用してこれらすべてのセットの和集合を作成したいと考えています。for ループで set.union() を使用しようとしましたが、これが機能しているとは思いません。この反復を行う簡単な方法はありますか?

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

私が抱えていると思う問題は、すべてのセットの和集合を作成していないことです。たくさんのデータを扱っているので、わかりにくいです。私が作成しているunionSetオブジェクトを使用して、このデータを印刷していますが、期待するほど大きくはないようです

4

2 に答える 2

3

これはかなり単純なアプローチです。結果セットを作成し、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}
于 2016-05-20T20:43:36.933 に答える
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}
于 2016-05-20T20:47:07.940 に答える