从字典中获取值到集合的最有效方法

use*_*317 2 python dictionary set set-comprehension

我似乎无法弄清楚如何使用set comprehension将以下内容编写成一行代码.如果它不可能有更快的方式来做我想在这里做的事情?基本上只是将字典的所有值都集成到一个集合中.某些值可以是空集.一个简单的例子如下

d = {1:set(),2:{1,2,3},3:{4}}

t = set()

for k, v in d.items():
   if len(v) > 0:
      t.update(v)

print(t)
Run Code Online (Sandbox Code Playgroud)

产量

{1,2,3,4}
Run Code Online (Sandbox Code Playgroud)

Tim*_*ers 7

最简单的可能是:

>>> set.union(*d.values())
{1, 2, 3, 4}
Run Code Online (Sandbox Code Playgroud)

在值中不需要特殊情况下的空集.将空集折叠到联合中对结果没有任何影响,并且在Python代码中提前检查长度比仅仅set.union()弄清楚它要慢.

一套完整

你也可以通过集合理解来做到这一点,但我希望这种方式会慢得多(虽然我还没有计时):

>>> {x for oneset in d.values() for x in oneset}
{1, 2, 3, 4}
Run Code Online (Sandbox Code Playgroud)

  • @ user1179317请参阅[解压缩参数列表](https://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists) (3认同)