Python Удалить повторяющийся диктант - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь найти способ удалить дубликаты из списка диктовок. Мне не нужно тестировать все содержимое объекта, потому что значения «name» в данном объекте достаточно, чтобы идентифицировать дублирование (т. Е. Дублирующееся имя = дублирующийся объект). Моя текущая попытка:

newResultArray = []

    for i in range(0, len(resultArray)):
        for j in range(0, len(resultArray)):
            if(i != j):
                keyI = resultArray[i]['name']
                keyJ = resultArray[j]['name']
                if(keyI != keyJ):
                    newResultArray.append(resultArray[i])

, что совершенно неверно. Благодарен за любые предложения. Спасибо.

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Поскольку «name» обеспечивает уникальность ... и, предполагая, что «name» является хешируемым объектом, вы можете создать промежуточный словарь с ключом «name». Любые словари с одинаковыми именами просто перезапишут своих предшественников в словарях, предоставив вам список уникальных словарей.

tmpDict = {result["name"]:result for result in resultArray}
newArray = list(tmpDict.values())
del tmpDict

Вы можете уменьшить его до

newArray = list({result["name"]:result for result in resultArray}.values())

немного неясно.

0 голосов
/ 14 июля 2020

Если name уникален, вы должны просто использовать словарь для хранения ваших внутренних словарей, причем name является ключом. Тогда у вас даже не будет проблемы с дубликатами, и вы сможете удалить их из списка за O (1) раз.

Поскольку у меня нет доступа к коду, который заполняет resultArray, я ' Я просто покажу, как вы можете преобразовать его в словарь за линейное время. Хотя лучшим вариантом было бы использовать словарь вместо resultArray в первую очередь, если это возможно.

new_dictionary = {}

for item in resultArray:
    new_dictionary[item['name']] = item

Если у вас должен быть список в конце, вы можете преобразовать обратно в словарь как таковые:

new_list = [v for k,v in new_dictionary.items()]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...