将长字符串中的相似字符串分组[Python]

时间:2019-06-13 15:51:34

标签: python string

我有四个或五个都具有序列的字符串,我想将它们分组在一个列表中。

例如:

cake/1/
cake/2/
big/1/
nice/1/
cake/3/

我需要清单中的蛋糕,清单中的大蛋糕和清单中的好蛋糕

这就是我尝试过的。

res = [list(i) for j, i in groupby(y, lambda a: a.split('/')[0])] 

这行不通,我考虑过使用正则表达式,但是我不确定是否可以继续前进。

这是预期的输出

[['cake/1/', 'cake/2/', 'cake/3/'], ['big/1/'], ['nice/1/']]

1 个答案:

答案 0 :(得分:1)

您几乎是正确的:

groupby每次更改键时都在更改组:

1112111将被分组为:111 - 2 - 111

因此,如果您想保证所有您的组将合并在一起,则应首先对字符串列表进行排序,以使所有相同的第一个单词字符串都在附近并且不会被拆分通过另一个首字母字符串:

y = [
    'cake/1/',
    'cake/2/',
    'big/1/',
    'nice/1/',
    'cake/3/'
]

res = [list(i) for j, i in groupby(sorted(y), lambda a: a.split('/')[0])]
                                     ^
                                     |
HERE --------------------------------+
  

[['big/1/'], ['cake/1/', 'cake/2/', 'cake/3/'], ['nice/1/']]