Переименуйте дубликаты в списке списка в python - PullRequest
1 голос
/ 24 февраля 2020

Я новичок в python, у меня был простой вопрос.

У меня есть список списков как

tempList = [ ['a', 'b', 'c', 'a', 'd', 'b', 'a'], ['a', 'c', 'd', 'c', 'd'] ]

Я хочу переименовать все последующие дубликаты, например, с инкрементными числами :

tempList= [ ['a', 'b', 'c', 'a_1', 'd', 'b_1', 'a_2'], ['a', 'c', 'd', 'c_1', 'd_1']]

Я знаю, как сделать это для плоского списка, но я не могу найти решение для списка списков. Кто-нибудь может дать мне указатель о том, как это сделать? Код, который я пробовал, как показано ниже, похоже, не работает.

for i in range(0, len(tempList)):
    counts = Counter(tempList[i])
    print(Counter(tempList[i]))
    val = 0
    for s,num in counts.items():
        if num > 1:
            counts[s] = val
            val += 1
        else:
            counts[s] = 0
    tempList = [x if counts[x]==0 else x + str(counts[x]) for x in tempList[i]]

1 Ответ

0 голосов
/ 24 февраля 2020

Вот возможное решение, сохраняющее порядок:

def foo(l):
    d = {}
    for i in range(len(l)):
        if l[i] in d:
            d[l[i]] += 1
            l[i] = l[i] + '_' + str(d[l[i]])
        else:
            d[l[i]] = 0
    return l

list_of_lists = [ ['a', 'b', 'c', 'a', 'd', 'b', 'a'], ['a', 'c', 'd', 'c', 'd'] ]
list_of_lists = [foo(x) for x in list_of_lists]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...