Словари в Python 3

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

Обычно словари используются для хранения связанных между собой данных; например, пара может состоять из имени пользователя и его ID. Элементы словарей берутся в фигурные скобки { }.

Словарь выглядит так:

8host = {'username': '8host-blog', 'online': True, 'followers': 987}

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

Ключи всегда находятся слева от двоеточия. Ключ может быть представлен любым неизменяемым типом данных. В приведённом выше примере содержатся такие ключи:

  • ‘username’
  • ‘online’
  • ‘followers’

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

Читайте также: Основы работы со строками в Python 3

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

  • ‘8host-blog’
  • True
  • 987

Первый ключ представлен строкой, второй – логическим значением, а третий – целым числом.

Читайте также:

Попробуйте отобразить словарь 8host:

print(8host)
{'username': '8host-blog', 'followers': 987, 'online': True}

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

Читайте также:

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

Доступ к элементам словаря

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

Доступ к данным по ключу

Словари могут стать важной частью разработанной в Python программы.

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

print(8host['username'])
8host-blog

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

Таким же образом можно вызвать и остальные значения этого словаря:

print(8host['followers'])
987
print(8host['online'])
True

Доступ к данным с помощью функций

Доступ к значениям можно получить не только с помощью ключей, но и при помощи функций.

  • dict.keys() – выводит ключи словаря.
  • dict.values() – выводит значения словаря.
  • dict.items() – выводит пары в виде кортежа (ключ, значение).

Попробуйте использовать функцию dict.keys(), чтобы получить ключи словаря. Передайте переменную 8host.keys() функции print().

print(8host.keys())
dict_keys(['followers', 'username', 'online'])

Ключи возвращаются в виде итерируемого объекта класса dict_keys и отображаются в формате списка.

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

8host = {'username': '8host-blog', 'online': True, 'followers': 987}
jesse = {'username': 'Jesse', 'online': False, 'points': 723}
for common_key in 8host.keys() & jesse.keys():
print(8host[common_key], jesse[common_key])

Словари 8host и jesse содержат данные о профилях пользователей.

Эти профили отличаются: первый – профиль для социальных сетей, второй – профиль для игр. Однако у них совпадают два ключа: username и online. Чтобы убедиться в этом, запустите программу, и она выдаст:

8host-blog Jesse
True False

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

Функция dict.values() используется аналогичным образом и возвращает значения заданного словаря. Например:

8host = {'username': '8host-blog', 'online': True, 'followers': 987}
print(8host.values())
dict_values([True, '8host-blog', 987])

Методы keys() и values() возвращают неотсортированные ключи или значения словаря 8host в виде объектов dict_keys и dict_values соответственно.

Чтобы запросить все элементы словаря, используйте функцию items():

print(8host.items())
dict_items([('online', True), ('username', '8host-blog'), ('followers', 987)])

Эта функция возвращает объект dict_items, который состоит из пар (ключ, значение), представленных в виде кортежей.

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

for key, value in 8host.items():
print(key, 'is the key for the value', value)
online is the key for the value True
followers is the key for the value 987
username is the key for the value 8host-blog

Цикл for выполнил итерацию списков ключей и значений и вывел результат построчно.

Редактирование словарей

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

Добавление и изменение элементов словарей

Для добавления элементов используется такой синтаксис:

dict[key] = value

Попробуйте добавить в словарь новую пару. Например:

usernames = {'8host': '8host-blog', 'Jamie': 'jamie54'}
usernames['Drew'] = 'iam-drew'
print(usernames)
{'Drew': 'iam-drew', '8host': '8host-blog', 'Jamie': 'jamie54'}

Как видите, в словаре появилась новая пара ‘Drew’: ‘iam-drew’.

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

Давайте рассмотрим словарь drew, который содержит данные об одном из пользователей этой сети. Предположим, сегодня количество его подписчиков заметно увеличилось, потому нужно обновить значение его ключа ‘followers’. Чтобы убедиться, что значение было изменено, используйте функцию print().

drew = {'username': 'iam-drew', 'online': True, 'followers': 305}
drew['followers'] = 342
print(drew)
{'username': 'iam-drew', 'followers': 342, 'online': True}

Как видите, значение ключа followers было изменено.

Этот метод позволяет добавлять данные в словарь путём пользовательского ввода. Создайте простую программу для командной строки, usernames.py, которая позволит пользователям добавлять данные в словарь.

# Определить исходный словарь
usernames = {'8host': '8host-blog', 'Jamie': 'jamie54'}
# Добавить цикл while
while True:
# Запросить имя
print('Enter a name:')
# Присвоить его переменной
name = input()
# Проверить, есть ли такое имя в словаре и вывести результат
if name in usernames:
print(usernames[name] + ' is the username of ' + name)
# Если имени нет…
else:
# Вывести на экран
print('I don\'t have ' + name + '\'s username, what is it?')
# Добавить имя пользователя для такого имени
username = input()
# Присвоить имя пользователя ключу
usernames[name] = username
# Сообщить об обновлении данных
print('Data updated.')

Запустите программу с помощью командной строки:

python usernames.py

Она выведен на экран:

Enter a name:
8host
8host-blog is the username of 8hosts
Enter a name:
Jesse
I don't have Jesse's username, what is it?
Jesse
Data updated.
Enter a name:

Чтобы остановить программу, нажмите CTRL + C.

Читайте также: Условные операторы в Python 3

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

Читайте также: Работа с текстовыми файлами в Python 3

Также редактировать словари можно с помощью функции dict.update().

Попробуйте добавить в словарь jesse ключ ‘followers’ и присвоить ему целое число с помощью jesse.update(). Чтобы отобразить словарь, используйте print().

jesse = {'username': 'Jesse', 'online': False, 'points': 723}
jesse.update({'followers': 481})
print(jesse)
{'followers': 481, 'username': 'Jesse', 'points': 723, 'online': False}

Метод dict.update() позволяет также изменять значения ключей.

Попробуйте изменить значение ключа online в словаре 8host:

8host= {'username': '8host-blog', 'online': True, 'followers': 987}
8host.update({'online': False})
print(8host)
{'username': '8host- blog', 'followers': 987, 'online': False}

Строка 8host.update({‘online’: False}) ссылается на ключ ‘online’ и изменяет его значение True на False. Функция print() позволяет проверить результат.

Удаление элементов словарей

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

del dict[key]

Вернёмся к словарю jesse и попробуем удалить из него строку ‘points’.

jesse = {'username': 'Jesse', 'online': False, 'points': 723, 'followers': 481}
del jesse['points'] print(jesse)
{'online': False, 'username': 'Jesse', 'followers': 481}

Чтобы очистить словарь, используйте функцию dict.clear(). Она сохранит словарь на случай, если он пригодится в дальнейшей работе, но удалит все его элементы.

Попробуйте удалить все элементы jesse:

jesse = {'username': 'Jesse', 'online': False, 'points': 723, 'followers': 481}
jesse.clear()
print(jesse)
{}

Как видите, в словаре не осталось ни одной пары.

Чтобы удалить словарь, используйте:

del jesse
print(jesse)

Если вы попробуете отобразить несуществующий словарь, на экране появится ошибка:

NameError: name 'jesse' is not defined

Заключение

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

Читайте также:

Tags: ,

2 комментария

  • Alex says:

    У вас ошибка – “Ключи всегда находятся справа от двоеточия. Ключ может быть представлен любым низменяемым типом данных. в приведённом выше примере содержатся такие ключи: ” и “Слева от двоеточия находятся значения. Значение может выражаться любым типом данных. В словаре выше мы видим такие значения: “. Должно быть наоборот – слева ключи, справа значения.

  • Павел Новиков says:

    написано-ключ находится справа от двоеточия.А в примере они слева-
    “8host = {‘username’: ‘8host-blog’, ‘online’: True, ‘followers’: 987}

    Ключи всегда находятся справа от двоеточия. Ключ может быть представлен любым неизменяемым типом данных. в приведённом выше примере содержатся такие ключи:

    ‘username’
    ‘online’
    ‘followers’”

Добавить комментарий для Alex Отменить ответ