В процессе очистки данных в словаре я обнаружил, что в наборе данных есть повторяющиеся значения для некоторых ключей. Это было неправильно.
Чтобы исправить это, я использовал цикл, чтобы пройтись по каждому ключу в словаре и удалить повторяющиеся значения, если они есть. Но есть и другие способы удалить дубликаты из словаря:
- Можно удалить повторяющиеся значения и оставить ключи.
- Можно удалить повторяющиеся ключи и оставить значения.
- Можно удалить и ключи, и значения, оставив только уникальные элементы.
Например, если вы хотите удалить дубликаты из словаря, вы можете удалить либо ключи, либо значения. Поскольку ключи словаря уникальны, они автоматически предотвращают дублирование ключей. Однако в словаре другой ключ может иметь повторяющиеся значения.
- С помощью цикла For
- С помощью словарного понимания
- С помощью Collections.defaultdict()
- Удалить дубликаты из словаря Python с помощью функции set() и Values()
С помощью цикла For
С помощью цикла for вы можете перебирать коллекцию объектов. В этом случае мы используем цикл for для перебора пар «ключ-значение» словаря и проверки на наличие повторяющихся значений.
Предположим, что словарь названий продуктов содержит идентификатор продукта как ключ и имя продукта как значение. Однако по какой-то причине в нём есть одинаковые имена продуктов для разных идентификаторов, как показано ниже.
products = {1:"Car Wiper",2:"Television", 3:"iPhone 15 pro max", 4:"Television"} print(products)
Посмотрите в приведенном выше словаре, который содержит повторяющееся значение «Телевидение» для идентификаторов 2 и 4.
Чтобы удалить повторяющиеся значения из продуктов словаря, используйте цикл for, как показано ниже.
products = {1:"Car Wiper",2:"Television", 3:"iPhone 15 pro max", 4:"Television"} duplicate_free_dict = {} for key, value in products.items(): if value not in duplicate_free_dict.values(): duplicate_free_dict[key] = value print("A dictionary without duplcate values", duplicate_free_dict)
Когда вы запускаете этот код, он выводит словарь без повторяющихся значений «Телевидение», например: {1: «Автомобильный дворник», 2: «Телевидение», 3: «iPhone 15 pro max»}.
Давайте разберём этот код по частям. Dupe_free_dict — это пустой словарь, который будет содержать только уникальные пары ключ-значение.
Затем запускается цикл for, который перебирает все элементы словаря, получая доступ к каждой паре ключ-значение с помощью метода items().
Следующая строка кода проверяет, есть ли текущее значение в новом словаре Dupe_free_dict, используя выражение «if value not in dupe_free_dict.values()». Если значение отсутствует в новом словаре, то соответствующий ключ со значением добавляется в Dupe_free_dict с помощью «dupe_free_dict[key] = value».
В результате этот код перебирает словарь «продукт» и удаляет из него повторяющиеся значения. Затем он добавляет уникальный ключ и значения в словарь Dupe_free_dict.
С помощью словарного понимания
Создание словаря с помощью понимания словаря — это быстрый способ создать словарь в одну строку.
Сначала вам нужно понять логику, по которой вы будете удалять повторяющиеся значения в словаре, используя понимание словаря:
- Здесь вы создадите два словаря Python. Первый будет иметь обратный порядок исходного словаря, т. е. пара ключ-значение будет заменена местами. Как вы знаете, ключи словаря в Python всегда уникальны, поэтому при обратном порядке дублирующиеся значения из исходного словаря будут автоматически удалены.
- Для достижения ожидаемого результата вы повторите процесс с первым созданным словарем Python во втором.
Давайте начнём. Предположим, у вас есть словарь «employees_name_with_seat_number», в котором ключами являются имена сотрудников, а значениями — номера мест в автобусе. Вам нужно выбрать по одному сотруднику с каждого отведённого места.
employees_name_with_seat_number = { 'sam': 10, 'tom': 13, 'rob': 10, 'john': 16, 'rosy': 14, 'lily': 15, 'joey': 12, 'dave': 16 }
Используйте логику понимания словаря, как показано ниже.
temp = {value: key for key, value in employees_name_with_seat_number.items()} result = {value: key for key, value in temp.items()} print("one employee from each allotted seat is: \n", result)
Из выходных данных видно, что код удаляет повторяющиеся значения номеров мест из словаря и возвращает результат в виде:
{‘rob’: 10, ‘tom’: 13, ‘dave’: 16, ‘rosy’: 14, ‘лили’: 15, ‘джоуи’: 12}.
Давайте разберёмся, как понимание словаря удаляет повторяющиеся значения. Код выглядит следующим образом:
temp = {значение: ключ для ключа, значение в employee’s_name_with_seat_number.items()}
Этот код создаёт новый словарь с именем «temp». Часть «для ключа, значения в employee’s_name_with_seat_number.items()» обеспечивает доступ к парам ключ-значение словаря. Затем, используя «значение: ключ», код меняет пару ключ-значение так, чтобы номера мест стали ключами, а имена сотрудников — значениями.
- В этом случае цель замены — удалить повторяющиеся значения. Как вы знаете, словарь не может содержать дублирующиеся ключи, поэтому вы хотите их удалить. Если создать значения в качестве ключей и затем снова сохранить их в словаре, то невозможно будет добавить дублирующиеся значения в качестве ключей. Именно это происходит в строке кода, представленной выше.
После этого следующий код ‘result = {value: key for key, value in temp.items()}’ создает новый словарь ‘result’, эта строка ‘value: key for key, value in temp.items()’ внутри фигурных скобок возвращает пару ключ-значение в исходное положение.
- Другими словами, он снова сохраняет ключ как значение, а значение как ключ в результате словаря, точно сохраняя пару ключ-значение в ее исходной форме.
Наконец, эта строка «print («один сотрудник из каждого выделенного места: \n», result)» выводит результат словаря, который содержит пару ключ-значение исходного словаря «employees_name_with_seat_number», но без повторяющихся значений.
С помощью Collections.defaultdict()
В Python модуль «коллекции» имеет функцию defaultdict(), которая создает новый ключ со значением по умолчанию, если этот ключ не существует в словаре.
- Итак, здесь вы реализуете логику, создав временный defaultdict Python со значением по умолчанию в виде пустого списка. Затем вы добавите ключи в пустой список (один за другим) значений в объекте defaultdict.
- После этого вы создадите словарь, который будет брать элементы объекта defaultdict и выбирать первое значение каждого списка. Наконец, вы перевернете пару ключ-значение созданного словаря в словарь результатов.
Например, в отеле есть одноместные и двухместные номера. Когда все гости подходят к стойке, чтобы получить ключи от номеров, там собирается большое количество людей, как на рыбном рынке.
Чтобы избежать этой ситуации, можно позвонить одному гостю из каждого номера и попросить его забрать ключ.
Создадим словарь под названием «гости».
guests = { 'sam': 101, 'tom': 105, 'rob': 102, 'john': 103, 'rosy': 105, 'lily': 104, 'david': 102 }
Используйте функцию defaultdict(), чтобы создать пустой список, как показано ниже.
temp_ddict = defaultdict(list)
Затем используйте цикл for и понимание словаря, чтобы удалить повторяющиеся значения из словаря, как показано ниже.
for key, value in guests.items(): temp_ddict[value].append(key) temp_dic = {key:value[0] for key, value in temp_ddict.items()} result = dict((value, key) for key, value in temp_dic.items()) print("One guest from each rooms are: \n", result)
Из выходных данных вы можете видеть, что он удаляет повторяющийся номер комнаты гостя и возвращает новый словарь, содержащий неповторяющиеся значения ‘{‘sam’: 101, ‘tom’: 105, ‘rob’: 102, ‘john’: 103, ‘лилия’: 104}’.
Вот как написать программу Python для удаления дубликатов из словаря с помощью Collections.defaultdict().
Удалить дубликаты из словаря Python с помощью функции set() и Values()
Вы будете использовать методы Values() и Set() этого метода. Метод Pythonvalues() возвращает значения из словаря как словаря, а Python set() может содержать только уникальные элементы.
Сначала вы создадите набор, содержащий все уникальные значения из исходного словаря Python. Затем вы создадите пустой словарь Python для хранения результатов.
Например, предположим, что у вас есть словарь «певцы», содержащий имена певцов, номинированных в США. Но вам нужен только один певец из каждого города, который умеет петь.
Ниже приведен словарь Python с именем певца в качестве ключа и его городом в качестве значения. Затем вы выберете по одному певцу от каждого города.
singers = { 'Taylor': 'Texas', 'MJ': 'Indiana', 'Katy': 'California', 'Selena': 'Texas', 'Lady': 'New York', 'Axl': 'Indiana' }
Затем все уникальные значения певцов словаря сохраняются с помощью методов set() иvalues(), как показано ниже.
temp_set = set(singers.values()) result = {}
В приведенном выше коде Singers.values() внутри set() извлекает все значения словаря и передает их методу set(), который включает только уникальные значения для переменной temp_set.
Кроме того, создайте пустой словарь с именем «result» для хранения пар ключ-значение.
После этого используйте цикл for для перебора извлеченного значения в temp_set, а затем сравните каждое значение ключа со значением в temp_set, как показано ниже.
for value in temp_set: for key in singers.keys(): if singers[key] == value: result[key] = value break print("selected singers names from each city are: \n", result)
Как вы можете видеть в выводе, он возвращает город певца без каких-либо повторяющихся значений, таких как ‘{‘Lady’: ‘New York’, ‘MJ’: ‘Indiana’, ‘Taylor’: ‘Texas’, ‘Katy’: ‘ Калифорния’}’.