【问题标题】:Group element of a list in PYTHONPYTHON 中列表的组元素
【发布时间】:2023-01-12 03:41:34
【问题描述】:

我有一个这样的列表,如果它们具有相同的 string.split('#',1) 和 string.split('#',2) `

list_1 = ['PERSONNE#FAVE#12','PERSONNE#DATE#12','PERSONNE#KIAL#12']
list_2 = ['PERSONNE#FAVE#11','PERSONNE#DATE#10']
sortie_list = list_1 + list_2

所需的输出:如果一个元素没有相似的字符串,它将附加到 out_list

out_list= [['PERSONNE#FAVE#12','PERSONNE#FAVE#11'],  ['PERSONNE#DATE#12','PERSONNE#DATE#10'],'PERSONNE#KIAL#12']

【问题讨论】:

    标签: python


    【解决方案1】:

    可以使用集合中的 defaultdict 来完成。

    from collections import defaultdict
    
    sortie_list = list_1 + list_2
    
    out_list = defaultdict(list)
    
    for item in sortie_list:
        first, second, third = item.split("#")
        out_list[first+'#'+second].append(item)
    
    out_list = list(out_list.values())
    

    使用这些输入:

    list_1 = ['PERSONNE#FAVE#12','PERSONNE#DATE#12','PERSONNE#KIAL#12']
    list_2 = ['PERSONNE#FAVE#11','PERSONNE#DATE#10']
    

    输出是:

    [['PERSONNE#FAVE#12', 'PERSONNE#FAVE#11'], ['PERSONNE#DATE#12', 
    'PERSONNE#DATE#10'], 'PERSONNE#KIAL#12']
    

    【讨论】:

    • 非常感谢@mrfluppy248
    【解决方案2】:

    itertools.groupby 是门票。你只需要记住先排序。

    >>> from itertools import groupby
    >>> f = lambda x: x.split('#', 2)[0:2]
    >>> [list(v) for _, v in groupby(sorted(sortie_list, key=f), key=f)]
    [['PERSONNE#DATE#12', 'PERSONNE#DATE#10'], ['PERSONNE#FAVE#12', 'PERSONNE#FAVE#11'], ['PERSONNE#KIAL#12']]
    

    【讨论】:

    • 我实际上试过这个 itertools 但正如你所说,我忘了提到排序,谢谢@Chris
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2017-04-11
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    相关资源
    最近更新 更多