【问题标题】:How do we get <generator object .<locals>.<genexpr> data from list?我们如何从列表中获取 <generator object .<locals>.<genexpr> 数据?
【发布时间】:2018-06-19 10:39:19
【问题描述】:
testdict = {'1':[1,1],'2':[2,2]}
test = []
for i in testdict:
    test.append(k for k in i)

如果我们为当前场景打印test,我们会得到类似的输出 -

[&lt;generator object &lt;genexpr&gt; at 0x7f8216183d00&gt;, &lt;generator object &lt;genexpr&gt; at 0x7f82161090f8&gt;]

我们如何获得实际数据?我们可以对列表推导进行追加吗?

【问题讨论】:

  • k for k in i 是您要附加到列表中的生成器表达式。你的预期输出是什么?
  • @Kasramvd 我想使用列表推导将数据附加到在 for 循环之外定义的空列表。
  • 哪些数据?您正在遍历作为字符串的字典键。即使您将所有 k 变量添加到列表中,您最终也会得到键中的所有字符。
  • 列表中的数据。
  • 假设我正在循环查询集并希望将其中的数据添加到一个空列表中

标签: python python-3.x list-comprehension


【解决方案1】:

附加生成器表达式时,如果要迭代生成器表达式,则不会附加提取的值。您只是附加惰性迭代器对象。

您最可能想要做的是从字典中提取所有值。您可以使用 itertools.chain 来执行此操作,而无需使用显式的 for 循环:

from itertools import chain

testdict = {'1': [1,1], '2': [2,2]}

res = list(chain.from_iterable(testdict.values()))

print(res)
[1, 1, 2, 2]

请注意,字典项不被认为是有序的(除非您使用的是 Python 3.7+)。因此,您应该考虑使用OrderedDictsorted(testdict.items()) 来定义输入的顺序。

【讨论】:

    猜你喜欢
    • 2013-04-28
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 2016-04-29
    • 2022-10-21
    相关资源
    最近更新 更多