比方说,我有下面的元组列表
[('FRG', 'MCO TPA PIE SRQ', 'WAVEY EMJAY J174 SWL CEBEE '),
(' ', 'FMY RSW APF', 'WETRO DIW AR22 JORAY HILEY4'),
(' ', 'FMY RSW APF', 'WETRO DIW AR22 JORAY HILEY4')
('FRG2', 'MCO TPA PIE SRQ', 'WAVEY EMJAY J174 SWL CEBEE '),
(' ', 'FMY RSW APF', 'WETRO DIW AR22 JORAY HILEY4')]
我该如何将这些数据分组,以便在最后进行一次dict,例如:
^{pr2}$也就是说,我想把tuple[0]
是一个单词的部分与tuple[0]
为空(仅包含空白)的(可能很多)以下部分粘在一起。
我正在试验groupby
和{
使用collections.defaultdict子类的解决方案:
输出:
^{pr2}$我并不推荐它,但是要使用
itertools.groupby()
来实现这一点,您需要一个能记住上次使用的键的键函数。像这样:一个简单的
^{pr2}$for
循环看起来更干净,不需要任何import
s:函数
groupby
和takewhile
不适合这类问题。在groupby
基于} 组。这意味着您需要保留最后遇到的第一个非空白元组元素才能使其正常工作。这意味着你要保持一些全球性的状态。通过保持这种状态,函数被称为"unpure",而大多数(甚至所有)itertools都是纯函数。在
key
函数的^{takewhile
^{} 需要向前看,以确定何时停止
yield
值。这意味着它将自动从迭代器中弹出一个值,而不是实际用于每个组的值。要实际应用它,您需要记住最后一个位置,然后每次创建一个新的迭代器。它也有一个问题,你需要保持某种状态,因为你想取一个不带空格的元素,然后是那些只有空格的第一个元素。在一种方法可能看起来像这样(但感觉不必要地复杂):
^{pr2}$替代方案
您可以简单地创建自己的生成器,使之非常简单。它是
^{3}$takewhile
方法的变体,但它不需要外部状态、islice
、takewhile
、groupby
或跟踪索引:相关问题 更多 >
编程相关推荐