带有lambda函数转换的Python列表理解

时间:2019-04-19 08:23:13

标签: python lambda pyspark list-comprehension

为简单起见,假设我有一个仅由两行组成的小语料库。

'This is first'
'This is second'

为了将其用于我的reduceByKey spark方法,我需要具有以下输出:

[((u'This', u'is'), 1), ((u'is', u'first.'), 1), ((u'This', u'is'), 1), ((u'is', u'second.'), 1)]

但是使用我在下面编写的代码,我采用了以下格式(更多列表)。检查我的愿望解决方案是否在一个“列表”中,但我得到的输出更多(取决于我每句话的单词数)

[[((u'This', u'is'), 1), ((u'This', u'first.'), 1)], [((u'is', u'first.'), 1)], [((u'This', u'is'), 1), ((u'This', u'second.'), 1)], [((u'is', u'second.'), 1)]]

如何修改它以获得我想要的东西。

couples = lines.map(lambda s : s.split(" ")).flatMap(lambda s: [[((s[i],s[j]), 1) for j in range(i+1 , len(s))] for i in range(len(s)-1) ])

万一某人不了解pyspark但好Python,我想修改此部分:

lambda s: [[((s[i],s[j]), 1) for j in range(i+1 , len(s))] for i in range(len(s)-1) ]

预先感谢

1 个答案:

答案 0 :(得分:0)

在python中,没有诸如返回值扩展之类的东西。这意味着您需要显式写出您的返回值。这意味着lambda必须返回一个列表。列表变平必须在外部进行。它可以以不同的方式实现。例如,

reduce(lambda a,b: a+b, lines.map(...).flatMap(...))