Как удалить пару из словаря python
Перейти к содержимому

Как удалить пару из словаря python

  • автор:

Как удалить ключ и его значение из словаря? [закрыт]

Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

Закрыт 2 года назад .

Суть такая, я могу добавлять в словарь много ключей и значений, но если такой ключ и такое значение уже есть в словаре, мне нужно их удалять. Kак такое можно сделать?

Отслеживать
51.6k 199 199 золотых знаков 59 59 серебряных знаков 242 242 бронзовых знака
задан 22 июл 2021 в 7:37
user449794 user449794
d = <"a":1, "b":2>; _ = d.pop(«a»); print(d) 😉
22 июл 2021 в 7:39
del d[‘a’] ещё, ну основы же, блин
22 июл 2021 в 7:42
Возможный дубликат вопроса: Как удалить из словаря ключ и значение по указанному ключу?
24 июл 2021 в 22:50

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Безопасный способ удаления ключа и значения — даже если такой ключ отсутствует , не будет исключительной ситуации ( exception ):

_ = dict_.pop(key, None) 
d = dict(a=1, b=2, c=3) print(d) _ = d.pop("b") print(d) _ = d.pop("blah", None) print(d) 

Отслеживать
ответ дан 22 июл 2021 в 7:46
MaxU — stand with Ukraine MaxU — stand with Ukraine
149k 12 12 золотых знаков 59 59 серебряных знаков 132 132 бронзовых знака

Вариантов есть несколько. Про pop уже написали. Но традиционный всё-таки вариант через del . Приведу варианты с проверкой наличия ключа и значения:

d = if 'a' in d and d['a'] == 1: del d['a'] 
if d.get('a') == 1: del d['a'] 

Отслеживать
ответ дан 22 июл 2021 в 7:49
67.7k 5 5 золотых знаков 20 20 серебряных знаков 51 51 бронзовый знак

Но мне нужно делать проверку на ключ и значение одновременно, может быть много одинаковых ключей но при этом разные значение, а я при добавлении проверяю, если такой ключ с таким значение уже есть, то он удаляется

– user449794
22 июл 2021 в 7:57
@Filips_1400 много одинаковых ключей не может быть)
22 июл 2021 в 8:00
Может) когда словарь включает подсловари. К примеру, собранные по id.
22 июл 2021 в 8:09

@Filips_1400 Ок, сделал проверку и ключа и значения. Вариант один ключ — много значений возможен только если вы значения храните в какой-то коллекции. Покажите ваш словарь тогда.

22 июл 2021 в 8:12

@AndyPavlov Если значение это коллекция и имеется в виду проверка значения внутри этой коллекции, тогда понятно )

22 июл 2021 в 8:12

    Важное на Мете
Связанные
Похожие

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Удаление пары ключа и значения словаря Python

Операция del dict[key] удалит элемент словаря dict , соответствующий ключу key .

Операция удаления del бросает исключение KeyError , если ключ key отсутствует в словаре dict .

Примеры удаления ключа из словаря:

>>> x = 'one': 0, 'two': 20, 'three': 3, 'four': 4, 'ten': 10> >>> del x['one'], x['ten'] >>> x # >>> del x['three'] >>> x # # попытка удаления несуществующего ключа >>> del x['one'] # Traceback (most recent call last): # File "", line 1, in # KeyError: 'one' 

Что бы при удалении ключей из словаря не возникали исключения, перед удалением необходимо проверять их наличие:

Пример удаления ключа с проверкой его наличия:

# исходный словарь x = 'one': 0, 'two': 20, 'three': 3, 'four': 4, 'ten': 10> # список ключей к удаления из словаря `x` del_key = ['one', 'five', 'four'] for key in del_key: # проверяем, есть ли # ключ в словаре `x` if key in x: # если есть, то удаляем del x[key] # смотрим что получилось print(x) #
  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Представления словарей dict.keys, dict.values и dict.items
  • Исходный словарь для представления dictview.mapping
  • Получение списка ключей словаря list(dict)
  • Количество элементов в словаре len(dict)
  • Доступ к значению словаря по ключу dict[key]
  • Добавление/изменение значения словаря по ключу key
  • Удаление значения словаря по ключу
  • Проверка наличия/отсутствия ключа key в словаре dict
  • Проверка наличия/отсутствия значения value в словаре Python
  • Проверка наличия/отсутствия пары (key, value) в словаре dict
  • Итерирование по ключам и значениям словаря Python
  • Метод dict.clear(). Очистить словарь
  • Метод dict.copy(), копия словаря
  • Метод dict.fromkeys(), словарь с ключами по умолчанию
  • Метод dict.get(), значение по умолчанию если ключа нет
  • Метод dict.items(), список кортежей
  • Метод dict.keys(), список ключей словаря
  • Метод dict.values(), список значений словаря
  • Метод dict.pop()
  • Метод dict.popitem(), получить пару ключ/значение
  • Метод dict.setdefault(), получает/вставляет значение ключа
  • Метод dict.update(), обновление/дополнение словаря
  • Объединение двух словарей в новый словарь Python
  • Сортировка словаря по значению и/или ключу
  • Обратный порядок/реверс словаря reversed(dict)
  • Генератор словаря и его использование
  • Фильтр словаря по ключам и/или значениям
  • Словарь как фабрика функций

Словари

Словари — еще один встроенный тип данных для хранения объектов. Они используются для связывания одного объекта, называемого ключом, с другим, называемым значением. Такое связывание называется отображением. Результатом отображения будет пара ключ-значение. Пары ключ-значение добавляются в словарь. Затем вы можете найти в словаре ключ и получить соответствующее ему значение. Однако нельзя, наоборот, использовать значение для нахождения ключа.

Словари, как и списки, изменяемы. То есть, в них можно добавлять новые пары ключ-значение. Их полезность заключается в связях между ключами и значениями — существует множество ситуаций, в которых вам потребуется сохранять данные попарно. Например, в словаре можно сохранить информацию о телефонных номерах ваших друзей:

phones =
"Иван": "+7123456789",
"Василий": "+37520123456"
>
print(phones)

При создании словаря нужно использовать фигурные скобки, отделять ключ от значения двоеточием, а пары ключ-значение разделять запятыми. В отличие от кортежей, если у вас есть только одна пара ключ-значение, запятая после нее не нужна.

Как только вы создали словарь, можете добавлять в него пары ключ-значение, используя синтаксис имя\_словаря[ключ] = значение , а также искать значение при помощи ключа, используя синтаксис имя_словаря[ключ] .

phones =
"Иван": "+7123456789",
"Василий": "+37520123456"
>
phones['Григорий'] = 1234567890
print(phones['Иван'])

Значением в словаре может быть любой объект. В предыдущем примере первые два значения были строками, а последнее значение, 1234567890 , — целым числом.

В отличие от значения словаря, ключ словаря должен быть неизменяемым. Ключом словаря может быть строка или кортеж, но не список или словарь. Для определения того, есть ли ключ в словаре, используйте ключевое слово in , а not in — для проверки отсутствия ключа.

phones =
"Иван": "+7123456789",
"Василий": "+37520123456"
>
print("Василий" in phones) # True

Из словаря можно удалить пару ключ-значение с помощью ключевого слова del .

phones =
"Иван": "+7123456789",
"Василий": "+37520123456"
>
del phones["Василий"]

Вы можете сохранять контейнеры в других контейнерах. Например, можно хранить списки внутри списка.

music =
"rap": ["Баста", "Кравц", "Злой Дух"],
"rock": ["Наутилус Помпилиус", "Кино", "Ария"],
"djs": ["Paul Oakenfold", "Tiesto"]
>

В этом примере словарь music имеет три ключа, каждый из которых является списком: К этим спискам можно получить доступ с помощью соответствующих ключей

music =
"rap": ["Баста", "Кравц", "Злой Дух"],
"rock": ["Наутилус Помпилиус", "Кино", "Ария"],
"djs": ["Paul Oakenfold", "Tiesto"]
>
print(music['rap']) # ['Баста', 'Кравц', 'Злой Дух']
print(music['rock'][-1]) # Ария

Хотите выучить Python на практике?

Python: как удалить ключ из словаря

В этой статье мы рассмотрим, как удалить ключи из словарей Python. Это можно сделать с помощью функции pop() , ключевого слова del и создания нового словоря.

Удалить ключ с помощью pop(key, d)

Функция pop(key, d) удаляет ключ из словаря и возвращает его значение. Требуется два аргумента: key — удаляемый ключ и необязательное возвращаемое значение d , если ключ не найден. Вот пример извлечения элемента только с обязательным аргументом key :

my_dict = popped_value = my_dict.pop(1) line = "The value removed from the dictionary of the key: 1 is <>" print(line.format(popped_value)) 

Этот фрагмент кода возвращает следующий результат:

The value removed from the dictionary of the key: 1 is a 

Теперь посмотрим, что происходит, когда мы пытаемся удалить несуществующий ключ:

my_dict = popped_value = my_dict.pop(3) line = "The value removed from the dictionary of the key: 3 is <>" print(line.format(popped_value)) 

Это вызывает KeyError, как и ожидалось, поскольку его не существует:

Traceback (most recent call last): File "", line 1, in KeyError: 3 

Если вы вызовете pop() с ключом, который не существует, Python вернет KeyError . Поэтому используйте pop(key) только в том случае, если вы уверены, что ключ существует в словаре.

Если вы не уверены, существует ли ключ, введите значение для второго необязательного аргумента pop() — значение по умолчанию. Вместо выдачи KeyError он вернет это значение.

Приведенный выше фрагмент можно переписать как:

my_dict = removed_value = my_dict.pop(3, None) line = "The value removed from the dictionary of the key: 3 is <>" print(line.format(removed_value)) 

И теперь он не выдает ошибку при запуске:

The value removed from the dictionary of the key: 3 is None 

Удалить ключ с помощью del dict[key]

Другой способ удалить ключ из словаря — использовать del ключевое слово. Это ключевое слово может удалить любой объект. Он также может удалить пару ключ-значение словаря следующим образом del dict_name[key] :

my_dict = del my_dict[1] line = "The dictionary after deletion is <>" print(line.format(my_dict)) 

Приведенный выше фрагмент возвращает следующий вывод, обозначающий словарь только с оставленными значениями:

The dictionary after deletion is

В отличие от pop() , при удалении значение не возвращается. Если вы хотите сохранить существующий ввод словаря, следующий раздел будет вам полезен.

Удаление нескольких ключей словаря с помощью создания нового словаря

Предыдущие методы обновляют словарь на месте, что означает, что пара ключ-значение уничтожается. Если исходный ключ необходимо сохранить, мы можем использовать для этого специальную функцию. В Python общеизвестно, что мы можем использовать составные части списков для создания нового списка на основе существующего. Мы можем сделать то же самое со словарями, используя словарные интерпретации.

Поэтому вместо удаления значений в списке мы можем использовать понимание dict для создания нового словаря с условием, исключающим значения, которые нам не нужны.

Рассмотрим следующий пример, в котором мы создаем новый словарь без ключа 1 :

my_dict = my_dict2 = line = "The new dictionary is <>" print(line.format(my_dict2)) 

Этот фрагмент кода генерирует следующий вывод, распечатывая новый словарь:

The new dictionary is

Обратите внимание, что мы создаем новый словарь, увеличивая использование памяти нашей программой. Для словарей большего размера, если мы не исключаем много членов, мы почти удваиваем объем памяти, используемый для этих данных.

Эффективность подходов выше

До сих пор мы наблюдали три метода. Но какой из трех методов самый быстрый?

Давайте создадим случайный словарь, на котором мы будем тестировать наши методы. Следующая функция gen_random_dict(n) принимает список в качестве аргумента и создает словарь со случайными начальными целыми числами:

import random def gen_random_dict(n): random.seed(0) mydict = <> for i in range(n): nmbr = random.randrange(1, n, 1) mydict[nmbr] = "value "+ str(nmbr) return mydict 

В этот же файл добавим несколько функций, которые удаляют ключ каждым из рассмотренных нами способов:

# Remove a key using pop function def remove_using_pop(dict_input): dict_input.pop(1) return None # Remove a key using del keyword def remove_using_del(dict_input): del dict_input[1] return None # Remove a key using condition def remove_using_condition(dict_input): return

Наконец, добавьте следующий код, который использует модуль timeit , измеряющий время выполнения нашего кода:

import timeit if __name__ == "__main__": func_to_be_tested = "remove_using_pop(gen_random_dict(10000))" setup_stmt = "from __main__ import remove_using_pop, gen_random_dict" runtime1 = timeit.timeit(func_to_be_tested, setup=setup_stmt, number=1) func_to_be_tested = "remove_using_del(gen_random_dict(10000))" setup_stmt = "from __main__ import remove_using_del, gen_random_dict" runtime2 = timeit.timeit(func_to_be_tested, setup=setup_stmt, number=1) func_to_be_tested = "remove_using_condition(gen_random_dict(10000))" setup_stmt = "from __main__ import remove_using_condition, gen_random_dict" runtime3 = timeit.timeit(func_to_be_tested, setup=setup_stmt, number=1) print("Runtime for removing key from Dict:") print("\t1) Using Pop: <>".format(str(runtime1))) print("\t2) Using Del: <>".format(str(runtime2))) print("\t3) Using Condition: <>".format(str(runtime3))) 

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

Runtime for removing key from Dict: 1) Using Pop: 0.015606499999194057 2) Using Del: 0.01090950000070734 3) Using Condition: 0.011443700001109391 

Использование ключевого слова del имеет преимущество перед остальными методами. Хотя для небольших словарей разница во времени не кажется очень большой.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *