#python #python-3.x
#python #python-3.x
Вопрос:
Я хочу удалить дубликаты из списка ниже, сохранив регистр слов?
lst = ['AWS Certification', 'AWS certification', 'AWS Certified Solutions Architect']
Я мог бы сделать что-то вроде,
list(dict.fromkeys([item.casefold() for item in lst]))
# returns
['aws certification', 'aws certified solutions architect']
Но это приведет к тому, что все слова будут в нижнем регистре, а это не то, что мне нужно.
Ищете какой-либо однострочный код?
Комментарии:
1. Если есть дубликаты с разными регистрами, как вы узнаете, какой из них следует сохранить? Или это не имеет значения?
2. @0x5453 Для меня это не имеет значения
Ответ №1:
Вы можете сопоставить регистр с исходными значениями, а затем извлечь их:
>>> list({i.casefold(): i for i in lst}.values())
['AWS certification', 'AWS Certified Solutions Architect']
Это сохранит последний вариант каждого дубликата из исходного списка, поскольку каждое новое вхождение будет переопределять предыдущее в dict.
Ответ №2:
На самом деле вы можете создать пару dict
string : index
пар, а затем использовать ее, чтобы вернуть исходные слова:
lst = ['AWS Certification', 'AWS certification', 'AWS Certified Solutions Architect']
res = [lst[j] for j in {item.casefold() : i for i, item in enumerate(lst)}.values()]
print(res)
Вывод:
['AWS certification', 'AWS Certified Solutions Architect']
Ответ №3:
Вы могли бы использовать dict с форматом casefolded : normal
, а затем принимать значения, поскольку ключи уникальны:
lst = ['AWS Certification', 'AWS certification', 'AWS Certified Solutions Architect']
lst = list({j.casefold() : j for j in lst}.values())
print(lst)
# returns
['AWS certification', 'AWS Certified Solutions Architect']