Рубрики
Без рубрики

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

Давайте изучим три способа удаления пар ключ-значение из словаря в Python – функция ‘ pop ()`, ключевое слово `del` и диктанты.

Автор оригинала: Sathiya Sarathi Gunasekaran.

Вступление

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

Извлеките ключ С помощью pop(key,d)

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

my_dict = {1: "a", 2: "b"}
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 = {1: "a", 2: "b"}
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 = {1: "a", 2: "b"}
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 = {1: "a", 2: "b"}
del my_dict[1]

line = "The dictionary after deletion is {}"
print(line.format(my_dict))

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

The dictionary after deletion is {2: 'b'}

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

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

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

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

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

my_dict = {1: "a", 2: "b"}
my_dict2 = {k: v for k, v in my_dict.items() if k != 1}

line = "The new dictionary is {}"
print(line.format(my_dict2))

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

The new dictionary is {2: 'b'}

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

Эффективность Функции Бенчмаркинга

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

Давайте создадим случайный словарь, на котором мы будем тестировать наши методы. Следующая функция 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 {k: v for k, v in dict_input.items() if k != 1}

Наконец, добавьте следующий код, который использует модуль 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 имеет преимущество перед остальными методами. Хотя разница во времени, кажется, не очень драматична для небольших словарей. Однако это окажет огромное влияние, когда размер словаря будет большим.

Вывод

В этой статье мы изучили три способа удаления пары ключ-значение из словаря – pop () , del и dict. Выбор правильного метода для правильного размера словаря может помочь уменьшить время выполнения скрипта и использование памяти.