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

Python 将值从字典中获取到集合的最有效方法,python,dictionary,set,set-comprehension,Python,Dictionary,Set,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) 输出 {1,2,3,4} 最简单的可能是: >>>

我似乎不知道如何使用集合理解将以下内容写入一行代码中。如果这是不可能的,有没有一个更快的方法来做我在这里试图做的事情?基本上就是把字典中的所有值都放到一个集合中。某些值可以是空集。下面是一个简单的例子

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)
输出

{1,2,3,4}
最简单的可能是:

>>> set.union(*d.values())
{1, 2, 3, 4}
没有必要对值中的空集进行特殊处理。将一个空集折叠到union中对结果没有影响,在Python代码中提前检查长度要比让
set.union()计算出来慢

有一套理解力 您也可以使用集合理解来完成,但我预计这种方式会慢得多(尽管我没有计时):


作为
联合
的替代方案,您可以使用:


Tim Peters和jdehesa的答案都比使用集合理解更快,因为它们避免了以Python速度运行的显式双
for
循环。但这里有一套理解方法:

d = {1:set(), 2:{1,2,3}, 3:{4}}
t = {v for u in d.values() for v in u}
print(t)
输出

{1, 2, 3, 4}

我在这里看不到t…对不起,忘了把t放在那里。请参阅更新。它基本上只是一个集合为什么不只是
t=set.union(*d.values())
?你可以在d.values()中为v做
,如果len(v)>0
,则
不是真的需要。我以前试过set.union,但没有得到答案。很明显,我错过了里面的。谢谢,正如我上面提到的,我曾经尝试过set.union,但没有得到答案。很明显,我错过了其中的*这就是它不起作用的原因。谢谢什么是*做它没有它就不能工作?@user1179317看到了吗
d = {1:set(), 2:{1,2,3}, 3:{4}}
t = {v for u in d.values() for v in u}
print(t)
{1, 2, 3, 4}