Рекомендации по использованию словарей в Python

1. Что такое словарь Python?

Словарь - это неупорядоченный и изменяемый контейнер Python, в котором хранятся сопоставления уникальных ключей со значениями. Словари заключаются в фигурные скобки ({}), включая пары ключ-значение, разделенные запятыми (,). Двоеточие (:) отделяет каждый ключ от его значения.

Ниже показаны три словаря, содержащие данные о населении 5 крупнейших городов Германии, список продуктов и оценки учащихся.

2. Создайте словарь с конструктором dict ().

Словари также можно создавать с помощью встроенной функции dict (** kwarg). Эта функция принимает произвольное количество аргументов ключевых слов (аргументов, которым предшествует идентификатор kwarg = value) в качестве входных данных.

Мы также можем создать словарь, используя другой словарь в сочетании с аргументами ключевого слова (dict (mapping, ** kwarg)) следующим образом:

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

Наконец, мы можем создать словарь, используя два списка. Во-первых, нам нужно создать итератор кортежей с помощью функции zip (* iterables). Затем мы используем функцию dict ([iterable, ** kwarg]) для создания словаря, как мы это делали ранее.

3. Доступ к значениям в словаре

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

Чтобы избежать исключения с неопределенными ключами, мы можем использовать метод dict.get (key [, default]). Этот метод возвращает значение для ключа, если ключ находится в словаре, иначе возвращает значение по умолчанию. Если значение по умолчанию не указано, возвращается Нет (но никогда не вызывает исключения).

4. Вставьте элементы в словарь.

Чтобы вставить элемент в словарь, мы можем использовать квадратные скобки следующим образом:

Чтобы вставить сразу несколько элементов, мы можем использовать метод dict.update ([other]). Этот метод обновляет словарь, используя пары ключ / значение из других, перезаписывая существующие ключи.

Как показано выше, метод .update () принимает в качестве аргумента не только другой словарь, но также список кортежей или аргументы ключевого слова. Этот метод изменяет словарь на месте, возвращая Нет.

5. Измените элементы в словаре.

Мы можем изменить значение элемента, нажав ключ, используя квадратные скобки ([]). Чтобы изменить несколько значений одновременно, мы можем использовать метод .update (), поскольку эта функция перезаписывает существующие ключи.

Впоследствии мы увеличиваем цену дивана на 100 единиц, и меняем оценки двух учеников.

6. Удалите элементы из словаря.

Чтобы удалить элемент в словаре, мы можем использовать ключевое слово del dict [key] или метод dict.pop (key [, default]).

Ключевое слово del dict [key] удаляет данный элемент из словаря, вызывая KeyError, если key не существует.

Если ключ существует в словаре, метод dict.pop (key [, default]) удаляет элемент с заданным ключом из словаря и возвращает его значение. Напротив, если ключ не существует в словаре, метод возвращает значение по умолчанию. Если значение по умолчанию не указано и ключ не существует, метод .pop () вызовет исключение. (KeyError).

7. Проверьте, существует ли ключ.

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

  • in → принимает значение true, если объект слева включен в объект справа.
  • не в → принимает значение true, если объект слева не включен в объект справа.

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

8. Скопируйте словарь.

Чтобы скопировать словарь, мы можем просто использовать метод dict.copy (). Этот метод возвращает мелкую копию словаря. Мы должны быть осторожны с мелкими копиями, поскольку если ваш словарь содержит другие объекты-контейнеры, такие как списки, кортежи или наборы, на них будут ссылаться снова, а не дублировать.

Чтобы избежать этой проблемы, мы можем создать глубокую копию с помощью функции copy.deepcopy (x) (определенной в модуле copy) следующим образом:

Разница между мелкими копиями и глубокими копиями актуальна только тогда, когда словарь содержит другие объекты, например списки, поскольку на эти объекты будут ссылаться, а не дублировать (мелкая копия ). Чтобы создать полностью независимый клон исходного словаря, нам нужно сделать глубокую копию.

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



Важно помнить, что оператор = не копирует словарь. Это просто другое имя для обозначения того же словаря, означающее, что любая модификация нового словаря отражается в исходном.

9. Определите длину словаря.

Чтобы определить, сколько пар ключ-значение содержит словарь, мы можем использовать функцию len (). Эта функция возвращает количество элементов объекта. Входом функции может быть словарь, а также другой тип последовательности, такой как строка, список, кортеж или набор.

10. Прокрутите словарь

Итерации по ключам

Чтобы перебирать ключи, мы можем использовать словарь непосредственно в цикле for следующим образом:

В качестве альтернативы мы можем использовать метод dict.keys (). Этот метод возвращает объект просмотра, содержащий ключи словаря.

Итерации по значениям

Если вам просто нужно работать со значениями словаря, вы можете использовать метод dict.values ​​() в цикле for. Этот метод возвращает объект представления, содержащий значения словаря.

Мы можем подсчитать, сколько людей живет в 5 крупнейших городах Германии, используя метод dict.values ​​() следующим образом:

Как мы видим, в 5 крупнейших городах Германии проживает почти 9 миллионов человек.

Перебор элементов

Когда вы работаете со словарями, вероятно, вам понадобится использовать ключи и значения. Чтобы просмотреть и то, и другое, вы можете использовать метод dict.items (). Этот метод возвращает объект представления, содержащий пары ключ-значение в виде списка кортежей.

Мы можем определить учащегося с самым низким баллом за тест с помощью метода dict.items () в сочетании с циклом for следующим образом:

Как показано выше, у Нормандо самый низкий балл за тест (2,5).

11. Толкование словаря

циклы for в Python очень удобны при решении повторяющихся задач программирования; однако есть еще одна альтернатива для достижения тех же результатов более эффективным способом: понимание словаря.

Понятия словаря позволяют создавать словарь с использованием элегантного и простого синтаксиса: {key: value for vars in iterable}. Кроме того, они быстрее традиционных циклов for.

Мы можем отфильтровать товары с ценой ниже 100 евро, используя как традиционный цикл for, так и понимание словаря.

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

12. Вложенные словари

Вложенные словари - это словари, содержащие другие словари. Мы можем создать вложенный словарь так же, как обычный словарь, используя фигурные скобки ({}).

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

Мы также можем создать предыдущий вложенный словарь с помощью конструктора dict (), передав пары ключ: значение как аргументы ключевого слова.

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

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



13. Альтернативные контейнеры: OrderedDict, defaultdict и Counter.

Модуль collections предоставляет типы данных контейнеров, альтернативные встроенным контейнерам Python. Три подкласса словарей, содержащиеся в модуле collections, которые очень удобны при работе с Python: (1) OrderedDict, (2) defaultdict и (3) Счетчик.

OrderedDict

OrderedDict состоит из словаря, который запоминает порядок добавления его содержимого. В Python 3.6+ словари также упорядочены по вставке, что означает, что они запоминают порядок вставленных элементов. Однако, чтобы гарантировать порядок элементов в других версиях Python, мы должны использовать контейнеры OrderedDict.

Как показано выше, OrderedDict принимает словарные методы и функции. Более того, элементы можно вставлять, изменять или удалять так же, как и в обычных словарях.

defaultdict

Defaultdicts - это подкласс словаря, который присваивает значение по умолчанию, когда ключ отсутствует (он еще не установлен). Они никогда не вызывают KeyError, если мы пытаемся получить доступ к элементу, которого нет в словаре, вместо этого создается новая запись.

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

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

Прилавок

Счетчик - это подкласс словаря для подсчета нестабильных объектов. Функция возвращает объект Counter, в котором элементы хранятся как ключи, а их счетчики хранятся как значения. Используя эту функцию, мы можем легко подсчитать элементы списка, как показано ниже.

Как показано выше, мы можем легко получить наиболее часто встречающиеся элементы с помощью метода .most_common ([n]). Этот метод возвращает список из n наиболее распространенных элементов и их количество.

14. Создайте фрейм данных Pandas из словаря.

DataFrame Pandas - это двухмерные табличные данные, в которых каждая строка представляет наблюдение, а каждый столбец - переменную. Фрейм данных Pandas можно создать с помощью конструктора pandas.DataFrame. Эта функция принимает в качестве входных данных различные контейнеры Python (например, списки, словари или массивы numpy). Однако в этой статье мы объясняем только способы создания DataFrame, предполагающие использование словарей.

Создайте DataFrame из словаря

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

Как мы можем заметить, индекс по умолчанию - это просто номер строки (целочисленный индекс, начинающийся с 0). Мы можем изменить эти индексы, передав список индексов конструктору DataFrame.

Создайте DataFrame из списка словарей

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

15. Функции в Pandas, использующие словари.

В Pandas есть несколько функций, которые используют словари в качестве входных значений, например pandas.DataFrame.rename и pandas.DataFrame.replace.

pandas.DataFrame.rename

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

Как показано выше, мы можем изменить метки индекса, предоставив словарь параметру индекса. Кроме того, мы можем изменить имена столбцов, предоставив словарь параметру столбец.

pandas.DataFrame.replace

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

Статья закончена! 🍀 Как видите, словари - действительно полезный инструмент в Python. Я надеюсь, что эта статья послужит вам руководством по использованию их всех преимуществ при кодировании на Python. 💪