我希望能够根据字符串中的前三个字符将列表中相似的项目分组。例如:
test = ['abc_1_2', 'abc_2_2', 'hij_1_1', 'xyz_1_2', 'xyz_2_2']
如何根据首字母分组(例如 'abc'
),将上述列表项分成不同的组?以下是预期输出:
output = {1: ('abc_1_2', 'abc_2_2'), 2: ('hij_1_1',), 3: ('xyz_1_2', 'xyz_2_2')}
output = [['abc_1_2', 'abc_2_2'], ['hij_1_1'], ['xyz_1_2', 'xyz_2_2']]
我尝试使用itertools.groupby
来完成这个任务,但没有成功:
>>> import os, itertools
>>> test = ['abc_1_2', 'abc_2_2', 'hij_1_1', 'xyz_1_2', 'xyz_2_2']
>>> [list(g) for k.split("_")[0], g in itertools.groupby(test)]
[['abc_1_2'], ['abc_2_2'], ['hij_1_1'], ['xyz_1_2'], ['xyz_2_2']]
我已查看以下帖子但没有成功:
如何合并列表中相似的项。此示例使用了一种对于我的例子过于复杂的方法来分组相似项(例如,'house'
和 'Hose'
)。
如何在Python列表中将等价项分组? 这是我找到列表推导式的灵感来源。
test = sorted(['abc_1_2', 'abc_2_2', 'hij_1_1', 'xyz_1_2', 'xyz_2_2'])
。否则,如果输入列表未排序,itertools.groupby
将无法按预期工作。 - Borealisitertools.groupby
时,首先对列表进行排序是一个好习惯。这是因为groupby
只捕获相似值的运行。也就是说,如果列表没有排序,它可能会错过一些内容。尽管如此,我在帖子中并没有提到这一点,因为主要重点是如何使用groupby
,而且您的列表已经排序了。 - user2555451