【问题标题】:What is the best practice to aggregate substrings in string values with python?用python聚合字符串值中的子字符串的最佳实践是什么?
【发布时间】:2020-09-23 09:07:32
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python string count sequence aggregation


    【解决方案1】:

    您可以使用itertools.groupby 查找匹配的相邻组件;这会将它们分组,因此您可以使用 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 的作用相同,但阅读起来更加混乱。

    【讨论】:

    • 非常感谢亲爱的先生!答案正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多