Skip to content Skip to sidebar Skip to footer

Python : How To Find Duplicates In A List And Update These Duplicate Items By Renaming Them With A Progressive Letter Added

I have a list of items like this: ['T1','T2','T2','T2','T2','T3','T3' ] I need to make sure that duplicates are renamed with a progressive letter added like this: ['T1','T2A','T2B'

Solution 1:

from collections import Counter
from string import ascii_uppercase as letters

def gen(L):
    c = Counter(L)
    for elt, count in c.items():
        if count == 1:
            yield elt
        else:
            for letter in letters[:count]:
                yield elt + letter

Now:

>>> L = ['T1','T2','T2','T2','T2','T3','T3']
>>> list(gen(L))
['T2A', 'T2B', 'T2C', 'T2D', 'T3A', 'T3B', 'T1']

Solution 2:

Considering the list is sorted, this will modify the list in-place. If the list is not sorted then you can sort it first using lis.sort():

>>> from string import ascii_uppercase
>>> from itertools import groupby
>>> from collections import Counter
>>> lis = ['T1', 'T2', 'T2', 'T2', 'T2', 'T3', 'T3']
>>> c = Counter(lis)
>>> for k, v in groupby(enumerate(lis), key = lambda x:x[1]):
    l = list(v)
    if c[k] > 1:
        for x, y in zip(l, ascii_uppercase):
            lis[x[0]] = x[1] + y
...             
>>> lis
['T1', 'T2A', 'T2B', 'T2C', 'T2D', 'T3A', 'T3B']

Post a Comment for "Python : How To Find Duplicates In A List And Update These Duplicate Items By Renaming Them With A Progressive Letter Added"