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 имеет преимущество перед остальными методами. Хотя для небольших словарей разница во времени не кажется очень большой.
Артём Санников
Данная книга является руководством для начинающих специалистов в области анализа и обработки данных. В книге рассматривается язык SQL и его процедурное расширение PL/SQL от компании Oracle.
Главная › Языки программирования › Python › Словари › Удаление пар «ключ-значение» в словаре Python
Удаление пар «ключ-значение» в словаре Python
Иногда информация в словаре устаревает и перестаёт быть нужной, поэтому пару «ключ-значение» можно полностью удалить при помощи команды del . Для удаления старого значения достаточно передать имя словаря и удаляемый ключ.
В качестве примера удалим ключ weight из словаря man
# Словарь с параметрами мужчины man = # Удаляем ключ weight из словаря del man[«weight»] # Выводим обновленный словарь print(man) # Финальный результат в консоли
Записи по теме
- Словарь в словаре Python
- Список в словаре Python
- Список словарей в Python
- Перебор всех значений в словаре Python
- Упорядоченный перебор словаря в Python
- Перебор всех ключей в словаре Python
- Перебор всех пар «ключ-значение» в словаре Python
- Изменение значений в словаре Python
Как удалить ключ и его значение из словаря? [закрыт]
Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 2 года назад .
Суть такая, я могу добавлять в словарь много ключей и значений, но если такой ключ и такое значение уже есть в словаре, мне нужно их удалять. Kак такое можно сделать?
Отслеживать
51.6k 200 200 золотых знаков 61 61 серебряный знак 242 242 бронзовых знака
задан 22 июл 2021 в 7:37
user449794 user449794
d = <"a":1, "b":2>; _ = d.pop(«a»); print(d) 😉"a":1,>
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
68k 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.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Удаление элемента из словаря в Python
Словари в Python — это мощный инструмент для хранения и обработки данных. Однако, возникает вопрос: как удалить элемент из словаря? Это достаточно просто сделать с помощью встроенной функции del.
Пример проблемы
Предположим, есть словарь:
my_dict =
И требуется удалить элемент ‘banana’.
Решение
В Python для удаления элемента из словаря используется оператор del:
del my_dict['banana']
Теперь, если выведем содержимое словаря, увидим, что элемент ‘banana’ удален:
print(my_dict)
Вывод будет следующий:
Создание нового словаря без определенного элемента
А что если требуется не модифицировать существующий словарь, а создать новый без определенного элемента? Для этого можно использовать генератор словарей:
new_dict =
Здесь используется генератор словарей, который перебирает все элементы исходного словаря и включает их в новый словарь, если ключ элемента не равен ‘banana’.
Таким образом, удаление элемента из словаря в Python — это простая и быстрая операция. С помощью встроенной функции del можно без проблем удалить любой элемент, а с помощью генераторов словарей можно создать новый словарь без определенного элемента.
