pythonlist

How to group a list of lists into a new list based on the beginning character of one of the elements in one of the lists


I have a lists of lists called "lines" that looks like this:

[['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'],
['REF', '0F', '708066255'],
['REF', '1L', '708066255'],
['DTP', '303', 'D8', '20240901'],
['DTP', '356', 'D8', '20240801'],
['NM1', 'IL', '1', 'FIGUEROA', 'LILIET', '', '', '', '34', '536899858'],
['N3', '2670 SO A W GRIMES BO', '#6102'],
['N4', 'ROUND ROCK', 'TX', '786642849', '', 'CY', '246'],
['DMG', 'D8', '19931219', 'F', '', 'H'],
['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'],
['REF', '0F', '811229070'],
['REF', '1L', '811229070'],
['DTP', '303', 'D8', '20240901'],
['DTP', '356', 'D8', '20240201'],
['NM1', 'IL', '1', 'MORILLO RUZA', 'OMARLY', 'V', '', '', '34', '000000000'],
['PER', 'IP', '', 'HP', '5129233526'],
['N3', '154 TERRI TL'],
['N4', 'ELGIN', 'TX', '786218937', '', 'CY', '011'],
['DMG', 'D8', '20040628', 'F', '', 'H']]

What I need is to group the lists into new lists wherever the 'INS' element appears in one of the lists. The output should look like:

[[['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'],
['REF', '0F', '708066255'],
['REF', '1L', '708066255'],
['DTP', '303', 'D8', '20240901'],
['DTP', '356', 'D8', '20240801'],
['NM1', 'IL', '1', 'FIGUEROA', 'LILIET', '', '', '', '34', '536899858'],
['N3', '2670 SO A W GRIMES BO', '#6102'],
['N4', 'ROUND ROCK', 'TX', '786642849', '', 'CY', '246'],
['DMG', 'D8', '19931219', 'F', '', 'H']],
[['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'],
['REF', '0F', '811229070'],
['REF', '1L', '811229070'],
['DTP', '303', 'D8', '20240901'],
['DTP', '356', 'D8', '20240201'],
['NM1', 'IL', '1', 'MORILLO RUZA', 'OMARLY', 'V', '', '', '34', '000000000'],
['PER', 'IP', '', 'HP', '5129233526'],
['N3', '154 TERRI TL'],
['N4', 'ELGIN', 'TX', '786218937', '', 'CY', '011'],
['DMG', 'D8', '20040628', 'F', '', 'H']]]

Im unsure how to do this


Solution

  • iterate through intial list, check if first element is INS or not, and based on that structure your final output

    below is example

    x = [
            ['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'],
            ['REF', '0F', '708066255'], ['REF', '1L', '708066255'],
            ['DTP', '303', 'D8', '20240901'],
            ['DTP', '356', 'D8', '20240801'],
            ['NM1', 'IL', '1', 'FIGUEROA', 'LILIET', '', '', '', '34', '536899858'],
            ['N3', '2670 SO A W GRIMES BO', '#6102'],
            ['N4', 'ROUND ROCK', 'TX', '786642849', '', 'CY', '246'],
            ['DMG', 'D8', '19931219', 'F', '', 'H'],
            ['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'],
            ['REF', '0F', '811229070'],
            ['REF', '1L', '811229070'],
            ['DTP', '303', 'D8', '20240901'],
            ['DTP', '356', 'D8', '20240201'],
            ['NM1', 'IL', '1', 'MORILLO RUZA', 'OMARLY', 'V', '', '', '34', '000000000'], 
            ['PER', 'IP', '', 'HP', '5129233526'], 
            ['N3', '154 TERRI TL'], 
            ['N4', 'ELGIN', 'TX', '786218937', '', 'CY', '011'], 
            ['DMG', 'D8', '20040628', 'F', '', 'H']
    ]
    
    sol = []
    tmp = []
    
    
    
    for i in x:
        if i[0]!="INS":
            tmp.append(i)
        else:
            if tmp:
                sol.append(tmp)
            tmp = [i]
    
    if tmp:
        sol.append(tmp)
    
    print(sol)
    
    # output
    """
    [
        [
            ['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'],
            ['REF', '0F', '708066255'],
            ['REF', '1L', '708066255'],
            ['DTP', '303', 'D8', '20240901'],
            ['DTP', '356', 'D8', '20240801'],
            ['NM1', 'IL', '1', 'FIGUEROA', 'LILIET', '', '', '', '34', '536899858'],
            ['N3', '2670 SO A W GRIMES BO', '#6102'],
            ['N4', 'ROUND ROCK', 'TX', '786642849', '', 'CY', '246'],
            ['DMG', 'D8', '19931219', 'F', '', 'H']
        ],
        [
            ['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'],
            ['REF', '0F', '811229070'],
            ['REF', '1L', '811229070'],
            ['DTP', '303', 'D8', '20240901'],
            ['DTP', '356', 'D8', '20240201'],
            ['NM1', 'IL', '1', 'MORILLO RUZA', 'OMARLY', 'V', '', '', '34', '000000000'],
            ['PER', 'IP', '', 'HP', '5129233526'],
            ['N3', '154 TERRI TL'],
            ['N4', 'ELGIN', 'TX', '786218937', '', 'CY', '011'],
            ['DMG', 'D8', '20040628', 'F', '', 'H']
        ]
    ]
    """