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)
最简单的可能是:
>>> 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)