【问题标题】:Iteration to make a union of sets迭代以建立集合的并集
【发布时间】:2016-09-18 05:34:11
【问题描述】:

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

【问题讨论】:

  • 您能分享一下您尝试过的代码以及您遇到的具体问题吗?

标签: python-3.x iteration set-union


【解决方案1】:

这是相当幼稚的方法 - 创建一个结果集,迭代 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}

【讨论】:

    【解决方案2】:

    一个简单的集合理解就可以了:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-21
      • 1970-01-01
      • 2016-11-29
      • 2011-04-25
      • 1970-01-01
      • 2017-03-10
      • 2022-01-02
      • 2018-10-25
      相关资源
      最近更新 更多