代码之家  ›  专栏  ›  技术社区  ›  JD2775

与其他子字符串比较后返回最大字符串数-Python

  •  0
  • JD2775  · 技术社区  · 7 年前

    我有一个清单如下:

    json_file_list = ['349148424_20180312071059_20190402142033.json','349148424_20180312071059_20190405142033.json','360758678_20180529121334_20190402142033.json']
    

    还有一张空名单:

    list2 = []
    

    我想做的是比较字符,直到第二个下划线“u”,如果它们相同,我只想将完整字符串的最大值附加到新列表中。在上面的例子中,前两个条目是重复的(直到第二个下划线),所以我想根据第二个下划线后面的数字来确定最大值。所以最终列表2只有2个条目,而不是3个条目

    我试过这个:

    for row in json_file_list:
        if row[:24] == row[:24]:
            list2.append(max(row))
        else:
            list2.append(row)
    

    但这只是回归:

    ['s', 's', 's']
    

    最终输出应为:

    ['349148424_20180312071059_20190405142033.json','360758678_20180529121334_20190402142033.json']
    

    有什么想法吗?我还意识到,这段代码的切片方式很脆弱(如果字符串变长/变短会发生什么),所以我需要想出一个更好的方法来实现这一点。如果是第二个下划线,则可能是base。字符串将始终以“.”结尾。json'

    0 回复  |  直到 7 年前
        1
  •  1
  •   Lante Dellarovere    7 年前

    我会用字典来做这件事:

    from collections import defaultdict
    
    d = defaultdict(list)
    for x in json_file_list:
        d[tuple(x.split("_")[:2])].append(x)
    
    
    new_list = [max(x) for x in d.values()]
    new_list
    

    输出:

    ['349148424_20180312071059_20190405142033.json',
     '360758678_20180529121334_20190402142033.json']
    
        2
  •  1
  •   Alec    7 年前

    此代码段中的if语句:

    for row in json_file_list:
        if row[:24] == row[:24]:
            list2.append(max(row))
        else:
            list2.append(row)
    

    总是下定决心 True .想想看,你怎么能 row[:24] 与自身不同?考虑到它决心 符合事实的 ,它添加了字母表(以及字符串)中最远的字母, s 在这种情况下 list2 .这就是为什么你会得到 ['s', 's', 's'] .

    也许我对您的请求理解不正确,但您不能将行中的所有元素添加到列表中,然后删除重复项吗?

    for row in json_file_list:
        for elem in row:
            list2.append(elem)
    list2 = sorted(list(set(list2)))
    
        3
  •  1
  •   Jason Miller    7 年前

    我想你可以拼接你想要比较的东西,然后使用内置的“set”来实现你的差异:

    set([x[:24] for x in json_file_list])
    set(['360758678_20180529121334', '349148424_20180312071059'])
    

    这将是一个简单的问题,加入其余的文本稍后

    list2=[]
    for unique in set([x[:24] for x in json_file_list]):
      list2.append(unique + json_file_list[0][24:])
    
    list2
    ['360758678_20180529121334_20190402142033.json',
     '349148424_20180312071059_20190402142033.json']