使用 python 聚合字符串值中的子字符串的最佳做法是什么?

What is the best practice to aggregate substrings in string values with python?

我有一个非常具体的问题要解决。我有一个带有字符串(路径)和相关指标的 DataFrame。为了使结果更具可读性,我想在条件下聚合字符串 (Count) 中的路径。一旦一个子字符串连续出现不止一次,此时应该在子字符串中添加一个乘数或类似的东西。

示例输入:
'SEO > direct_&c_(notset) > direct_&c_(notset) > direct_&c_(notset) > SEO'

期望的输出:
'SEO > 3 x (direct_&c_(notset)) > SEO'

如您所见,不应聚合子字符串“SEO”,因为顺序很重要。输入显示用户路径,因此如果简单地计算不同的子字符串,重要信息将会丢失。

您可以使用 itertools.groupby to find matching adjacent components; this returns them grouped, so you can then use more_itertools.ilen ("iterator length") 获取每个组中的计数(如果没有匹配项,则为 1)。

from itertools import groupby

from more_itertools import ilen

in_str =  'SEO > direct_&c_(notset) > direct_&c_(notset) > direct_&c_(notset) > SEO'

out_list = []
for component, group in groupby(in_str.split(' > ')):
    count = ilen(group)
    if count == 1:
        out_list.append(component)
    else:
        out_list.append('%s x (%s)' % (count, component))

out_str = ' > '.join(out_list)
print(out_str)

如果你不想使用 more_itertools 库,你可以这样写:

count = sum(1 for _ in group)

这与 ilen 的作用相同,但读起来更混乱。