Python 肾盂道结果为<;生成器对象<;genexpr>;在0x106915f90处>;

Python 肾盂道结果为<;生成器对象<;genexpr>;在0x106915f90处>;,python,for-loop,set,Python,For Loop,Set,我试图将键和值添加到一个集合中,但我想知道为什么会这样: corpus = {"1.html": {"2.html", "3.html"}, "2.html": {"3.html"}, "3.html": {"2.html"}} unique = set(val for each in corpus.values() for val in each) for x in corpus.keys(): unique.add(x) 结果如下:{'2.html','1.html','3.h

我试图将键和值添加到一个集合中,但我想知道为什么会这样:

corpus = {"1.html": {"2.html", "3.html"}, "2.html":
 {"3.html"}, "3.html": {"2.html"}}

unique = set(val for each in corpus.values() for val in each)
for x in corpus.keys():
    unique.add(x)
结果如下:
{'2.html','1.html','3.html'}

但这是:

corpus = {"1.html": {"2.html", "3.html"}, "2.html":
 {"3.html"}, "3.html": {"2.html"}}

unique = set(val for each in corpus.values() for val in each)
unique.add(x for x in corpus.keys())
结果如下:


{,'3.html',2.html'}

x for x in corpus.keys()
是一个生成器表达式,仅在需要时生成


set.add()
将向集合中添加一个项,而不管它是哪种类型。您必须单独添加每个项,就像在第一个示例中一样。

x for x in corpus.keys()
是一个生成器表达式,只会按需生成

set.add()
将向集合中添加一个项,而不管它是哪种类型。您必须单独添加每个项,就像在第一个示例中一样。

需要一个参数,因此当传递生成器表达式时,它会将其添加到集合中

要解压缩生成器表达式,请将其传递给,它需要一个iterable

>>> s = {x for x in 'abc'}
>>> s.update(x for x in 'def')
>>> s
{'e', 'a', 'd', 'c', 'f', 'b'}
需要单个参数,因此当传递生成器表达式时,它会将其添加到集合中

要解压缩生成器表达式,请将其传递给,它需要一个iterable

>>> s = {x for x in 'abc'}
>>> s.update(x for x in 'def')
>>> s
{'e', 'a', 'd', 'c', 'f', 'b'}

因为在第二个版本中,您将在corpus.keys()中为x添加生成器
x而不是
x
,因为在第二个版本中,您将在corpus.keys()中为x添加生成器
x而不是
x
,谢谢您的帮助!解决了问题:)谢谢你的帮助!解决了这个问题:)