2

我有一个包含集合作为值的字典,我想使用 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 对象,我正在打印出这些数据,但它似乎并没有我期望的那么大

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 回答