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

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

  • автор:

Словари¶

dict (от английского «dictionary», словарь) – еще один тип данных в Python. Словари хранят пары ключ : значение . То есть в списках можно достать элемент, если указать его позицию в виде целого числа, а в словарях – тот самый ключ . dict – тип данных, поэтому достать элемент по номеру не получится, но отображение содержимого будет элементов. ключей должна поддерживаться, чтобы всегда можно было быстро найти одно единственно верное значение .

В некоторых языках программирования можно встретить ассоциативные массивы – полную аналогию dict . Также вспомним базы данных, широко использующиеся во всём мире для хранения информации: в таблице можно установить первичный ключ, который уникально идентифицирует запись, как и ключ соответствует значению в словаре. Самый простой пример ключа — порядковый номер объекта!

Создание словаря¶

Использовать словарь стоит, когда нужно сохранять объекты с какими-то ключами и обращаться к объектам по известным ключам. Один из способов определения словаря: указание пар ключ : значение через^запятую внутри фигурных скобок <> . Напоминает set , правда? <> позволяет создать пустой словарь, но не пустое множество.

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

В примере dates имеет две пары значений. В первой паре строка «Кунг Фьюри» является ключом, а «1968-09-09» – его значением.

Получение значения по ключу¶

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

Если указать неверный ключ в [] , Python будет ругаться: выбросит ошибку KeyError и перестанет выполнять код. Чуть ниже посмотрим, как можно избежать таких ситуаций.

Изменение и добавление значений¶

Синтаксис изменения значения по ключу и добавления нового ключа со значением одинаковый: в [] нужно указать ключ, поставить = и указать значение, которое теперь будет соответствовать ключу.

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

Основные методы словаря¶

Проверка вхождения и get() ¶

Помните, ранее говорили, что обращение к несуществующему ключу приводит к ошибке? Пришло время посмотреть пару способов борьбы!

Можно проверить, есть ли интересующий ключ среди множества ключей словаря. Это делается при помощи бинарного оператора in . Слева должен быть указан ключ, справа – переменная со словарем:

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

Теперь о методе get() : при помощи его тоже можно получать значения из словаря по ключу. KeyError никогда не появится: если ключа нет, по умолчанию возвращается None :

Вторым аргументом метода get() можно указать значение, которое должно возвращаться вместо None , когда ключ не был найден:

Что такое «длина словаря»?¶

Функция len() для словаря будет возвращать количество пар ключ : значение (их столько же, сколько ключей), которое в нём содержится:

Удаление из словаря¶

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

при помощи инструкции del (от английского «delete») можно удалить пару ключ : значение (удаление ключа эквивалентно удалению пары ключ : значение , так как теряем возможность найти то самое значение ), в общем виде:

Предположим, коллега из самого первого примера уволился и больше нет смысла хранить его день рождения:

pop() — метод, который достает значение, хранящееся по переданному ключу, и сразу удаляет ключ из словаря:

Для метода pop() есть возможность указать значение, которое будет возвращено при обращении к несуществующему ключу. Почти как get() , но всё-таки, без указания этого значения, pop() выбрасывает KeyError .

popitem() имеет схожее название, но не путайте с предыдущим методом: этот на вход не принимает ключ , а возвращает пару ключ : значение , которая была добавлена последней (такое поведение гарантируется с Python ).

clear() позволяет удалить сразу все ключи словаря, то есть полностью его очистить:

Обратите внимание на то, как работают методы pop() , popitem() и clear() : как только вызываются, словарь меняет свой состав (изменения происходят in place, то изменить по месту без копирования).

Обновление и добавление ключей¶

Лицезрели, что значения в словарь можно добавлять или менять, обращаясь по ключу. Python предоставляет возможность не писать кучу присваиваний, а использовать лаконичный метод update() , который на вход может принимать либо другой словарь, либо пары ключ : значение в какой-то последовательности (например, кортежи по два значения в списке: первое – ключ, второе – значение)

А что, если в update() передать пары, ключ которых уже был в словаре? Значения по дублирующимся ключам будут на новые:

Доступ к ключам и значениям¶

В Python можно без проблем извлекать отдельно по ключам или значениям, а также итерироваться по элементам словарей в цикле for . Осталось разобраться, как это работает.

Ключи¶

По умолчанию, в конструкциях вида

переменные цикла (тут – key ) будут принимать значения из множества словаря. Аналогично можно использовать метод keys() (позволяет достать все ключи), который явно говорит, что цикл идет по ключам, например:

Значения¶

При помощи метода values() можно получить все значения, хранящиеся по всем ключам словаря:

Напрямую по значению получить ключ нельзя.

Всё и сразу¶

Существует метод items() , который достает пары ключ : значение в виде последовательности кортежей. Его же часто удобно использовать в циклах, дабы не тащить длинную запись в виде названия словаря и квадратных скобок с ключом при обращении к значению:

Сортировка¶

Функция sorted() доступна и для словарей. По умолчанию ключи словаря поддерживают порядок, в котором были добавлены, но можно отсортировать их в нужном направлении (в зависимости от типа):

Когда в функции передаётся просто название переменной со словарем, работа идет только над множеством ключей.

Можно ли отсортировать словарь по значениям?

Да, можно попробовать самостоятельно разобраться с аргументами функции sorted() .

Что можно хранить¶

Теперь добавим немного технических подробностей: возможно, уже заметили самостоятельно, что dict может принимать в качестве ключа не всякое значение. На самом деле только объекты (можно вызвать функцию hash() и получить значение) могут быть ключами словаря, на значения это ограничение не распространяется. В dict и set значение хеша от объекта используется для поиска внутри структуры.

Ключом словаря нельзя сделать объект типа, например, list , set или сам dict , так как значение их хеша может измениться со временем. Неизменяемый кортеж может быть ключом только если не содержит внутри изменяемые объекты.

Изменяемость и неизменяемость¶

В англоязычной литературе изменяемые типы называют , а неизменяемые – , почитать документацию.

В Python всё есть объект. Когда пользователь присваивает значение переменной, она начинает ассоциироваться с ячейкой памяти, где лежит это значение. Переменная знает адрес, откуда можно получить значение. id() и hex() показывают адрес в памяти компьютера. id() — адрес в десятичном виде, а hex() поможет перевести в шестнадцатеричный.

How can I remove a key from a Python dictionary?

I want to remove a key from a dictionary if it is present. I currently use this code:

Without the if statement, the code will raise KeyError if the key is not present. How can I handle this more simply?

See Delete an element from a dictionary for more general approaches to the problem of removing a key from a dict (including ones which produce a modified copy).

cottontail's user avatar

11 Answers 11

To delete a key regardless of whether it is in the dictionary, use the two-argument form of dict.pop() :

This will return my_dict[key] if key exists in the dictionary, and None otherwise. If the second parameter is not specified (i.e. my_dict.pop(‘key’) ) and key does not exist, a KeyError is raised.

To delete a key that is guaranteed to exist, you can also use

This will raise a KeyError if the key is not in the dictionary.

Specifically to answer «is there a one line way of doing this?»

You should consider, though, that this way of deleting an object from a dict is not atomic—it is possible that ‘key’ may be in my_dict during the if statement, but may be deleted before del is executed, in which case del will fail with a KeyError . Given this, it would be safest to either use dict.pop or something along the lines of

which, of course, is definitely not a one-liner.

It took me some time to figure out what exactly my_dict.pop("key", None) is doing. So I’ll add this as an answer to save others googling time:

pop(key[, default])

If key is in the dictionary, remove it and return its value, else return default. If default is not given and key is not in the dictionary, a KeyError is raised.

Peter Mortensen's user avatar

Akavall's user avatar

del my_dict[key] is slightly faster than my_dict.pop(key) for removing a key from a dictionary when the key exists

But when the key doesn’t exist if key in my_dict: del my_dict[key] is slightly faster than my_dict.pop(key, None) . Both are at least three times faster than del in a try / except statement:

If you need to remove a lot of keys from a dictionary in one line of code, I think using map() is quite succinct and Pythonic readable:

And if you need to catch errors where you pop a value that isn’t in the dictionary, use lambda inside map() like this:

or in python3 , you must use a list comprehension instead:

It works. And ‘e’ did not cause an error, even though myDict did not have an ‘e’ key.

Marc Maxmeister's user avatar

You can use a dictionary comprehension to create a new dictionary with that key removed:

You can delete by conditions. No error if key doesn’t exist.

Shameem's user avatar

You can use exception handling if you want to be very verbose:

This is slower, however, than the pop() method, if the key doesn’t exist.

It won’t matter for a few keys, but if you’re doing this repeatedly, then the latter method is a better bet.

The fastest approach is this:

But this method is dangerous because if ‘key’ is removed in between the two lines, a KeyError will be raised.

Alec's user avatar

We can delete a key from a Python dictionary by the some of the following approaches.

Using the del keyword; it’s almost the same approach like you did though —

Or

We can do like the following:

But one should keep in mind that, in this process actually it won’t delete any key from the dictionary rather than making a specific key excluded from that dictionary. In addition, I observed that it returned a dictionary which was not ordered the same as myDict .

If we run it in the shell, it’ll execute something like <'five': 500, 'four': 400, 'three': 300, 'two': 200>— notice that it’s not the same ordered as myDict . Again if we try to print myDict , then we can see all keys including which we excluded from the dictionary by this approach. However, we can make a new dictionary by assigning the following statement into a variable:

Now if we try to print it, then it’ll follow the parent order:

Or

Using the pop() method.

The difference between del and pop is that, using pop() method, we can actually store the key’s value if needed, like the following:

Словари и их методы в Python

Обложка: Словари и их методы в Python

Словарь — неупорядоченная структура данных, которая позволяет хранить пары «ключ — значение». Вот пример словаря на Python:

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

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

Прим. перев. На самом деле проблема не с изменяемыми, а с нехэшируемыми типами данных, но обычно это одно и то же.

Получение данных из словаря

Для получения значения конкретного ключа используются квадратные скобки [] . Предположим, что в нашем словаре есть пара ‘марафон’: 26 .

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

Добавление и обновление ключей

Добавление новых пар в словарь происходит достаточно просто:

Обновление существующих значений происходит абсолютно также:

Удаление ключей

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

Методы

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

Update

Метод update() пригодится, если нужно обновить несколько пар сразу. Метод принимает другой словарь в качестве аргумента.

Если вас интересует, почему данные в словаре расположены не в том порядке, в котором они были внесены в него, то это потому что словари не упорядочены.

Метод get() возвращает значение по указанному ключу. Если указанного ключа не существует, метод вернёт None .

Метод можно использовать для проверки наличия ключей в словаре:

Также можно указать значение по умолчанию, которое будет возвращено вместо None , если ключа в словаре не окажется:

Метод pop() удаляет ключ и возвращает соответствующее ему значение.

Метод keys() возвращает коллекцию ключей в словаре.

Values

Метод values() возвращает коллекцию значений в словаре.

Items

Метод items() возвращает пары «ключ — значение».

Итерация через словарь

Вы можете провести итерацию по каждому ключу в словаре.

Очевидно, вместо story_count можно использовать story_count.keys() .

В примере кода ниже цикл for использует метод items() для получения пары «ключ — значение» на каждую итерацию.

How to Remove a Key from a Python Dictionary – Delete Key from Dict

Zaira Hira

Zaira Hira

How to Remove a Key from a Python Dictionary – Delete Key from Dict

A dictionary is a very powerful data collection in Python. Dictionaries help make database operations faster.

You can append items to an existing dictionary and remove them as well.

In this blog post, we will learn how to delete «keys» using two methods:

  1. Deleting key:value pairs using del .
  2. Deleting key:value pairs using pop() .

What is a Dictionary in Python?

A dictionary is an unordered collection of items. The items are defined using key-value pairs. Keys map to their corresponding item in the list. Whenever an item needs to be queried, we can do this using its key.

For example, «city»:»Seoul» is a key value pair where «city» is the key, and «Seoul» is its value.

Here’s the syntax for declaring a dictionary in Python:

In our examples, we will use the below dictionary:

image-61

Declare a dictionary named my_dict

How to Remove Keys from a Dictionary in Python

Remove a key using del .

You can remove a key using the del keyword. Here’s the syntax for that:

Let’s delete a key in our dictionary my_dict . We’ll be deleting the key: «Fruit».

image-62

After we delete that key, we can see that the key Fruit is no longer present in the dictionary.

But, what happens if you try to delete a key that does not exist?

Let’s try to delete the key Fruit again.

image-63

Delete a key that does not exist.

We received a traceback error. This is valid as the key does not exist.

One drawback of del is that it throws an exception when key is not found. The exception needs to be handled explicitly in a try catch block.

However, we can handle this exception using the second method.

Remove a key using pop()

The second way to remove a key is using the pop() method. Here’s its syntax:

  • key is the key to be removed.
  • None specifies that if the key is found, then delete it. Else, do nothing.
  • We can also specify a custom message in place of ‘None’ for cases where key is not found.

Now, if we try to delete Fruit again, there is no exception thrown.

image-65

Now, let’s try to delete an existing key with pop() .

image-64

Here, the key:Book is successfully deleted.

One advantage of pop() over del is that it allows us to handle exceptions. It provides a mechanism to return a custom message when exception occurs.

How to set a custom message:

Let’s try to delete ‘Book’ again. We are expecting an error, so let’s set a return message.

Here, Key does not exist is the return message in case the key does not exist.

image-68

As «Book» was already deleted, we are getting the error message

Another advantage is that it also returns the value of the key in addition to performing a delete operation. If you need to know the value of a deleted key, then pop() is the suitable option.

image-67

Conclusion

In this tutorial, we learned how to create a dictionary in Python. We also focused on how to delete key:value pairs in a dictionary.

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

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