17/07/2025

Коллекции данных, продолжение

Коллекции данных, продолжение

Словарь

Словарь(dict) - это контейнер для пары ключ - значение.

Значением может быть любой объект, а вот ключом нет.

Как создать словарь

Ключи - только строки:

a = dict(one=1, two=2, three=3)

При другом варианте, можно в ключах задавать и другие структуры данных:

a = {'one': 1, 'two': 2, 'three': 3}
b = {(1,2,3): 1, 'two': 2, 'three': 3}

задание пар ключ-значение:

с = dict([('one', 1), ('two', 2), ('three', 3)])
d = dict({'one': 1, 'two': 2, 'three': 3})
d = dict({'one': 1, 'two': 2}, three=3)

Интерация по словарю

По словарю можно интерироваться:

a = dict(one=1, two=2, three=3)

for key, value in a.items():
  print(key, value) # one 1 two 2 three 3
  
for x in a.items():
  print(x) # ('one', 1) ('two', 2) ('three', 3)

Создание словаря из других структур

Можно создавать словарь из других структур:

Создаем словарь соответсвия числа от 0 до 9 включительно и степени двойки с этим показателем.

f = {x : 2 ** x for x in range(10)}
print(f)
# {0: 1, 1: 2, 2: 4, 3: 8, 4: 16, 5: 32, 6: 64, 7:128, 8: 256, 9: 512}

Можно создавать словарь из другого словаря

f = {x : 2 ** x for x in range(10)}
g = {k: v for k, v in f.items() if k % 2 == 1}
print(g)
# {1: 2, 3: 8, 5: 32, 7:128, 9: 512}

Перевернуть словарь

можно перевернуть словарь

f = {x : 2 ** x for x in range(10)}
g = {v: k for k, v in f.items()} # значение и ключ поменялись местами
print(g)

Длина словаря

длина словаря - функция len(число ключей в нём)

print(len(f), len(g))

Входит ли ключ в словарь

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

print(1 in f, 10 in f, 2 not in f)

Обращение по индексу

можно обращаться по индексам(ключам) словаря

print(f[3])

если какого то ключа нет в словаре то получим ошибку KeyError

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

print(f.get(10, -1))

Изменение словаря

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

f[3] = -1
print(f)

Функция update

Чтобы обновлять значения в словаре есть функция update - вызывается от исходного словаря и передает словарь с новыми значениями.

  • если ключ есть и в b и в a, то значение берем из нового словаря(b) и заменим его в старом(a);
  • если какого то ключа в b нет, который есть в a, то он остается неизменным;
  • если ключ есть в новом словаре (b) и нет в старом (a), тогда этот ключ добавляется вместе с его значением в исходный словарь (a).
a = {'one': 1, 'two': 2, 'three': 3}
b = {'two': -2, 'three': -3, 'four': -4}

a.update(b) 
a.update([('two', 2), ('three', 3)], one=-1)
print(a)

Метод update может принимать как список пар так и функциональные значения.

Удалить значение из словаря

Чтобы удалить значение используем ключевое слово del.

a = {'one': 1, 'two': 2, 'three': 3}
b = {'two': -2, 'three': -3, 'four': -4}

del a["one"]
print(a)

Получить значение по ключу

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

a = {'one': 1, 'two': 2, 'three': 3}
b = {'two': -2, 'three': -3, 'four': -4}

val = a.pop('two')
print(val, a)

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

a = {'one': 1, 'two': 2, 'three': 3}
b = {'two': -2, 'three': -3, 'four': -4}

val = a.pop('two', None)
print(val, val is None, a)

None - это специальная константа, которая обозначает пустоту, ничего, специальный флаг.

Методы для получения ключей, значений и пар ключ-значение

a = {'one': 1, 'two': 2, 'three': 3}
b = {'two': -2, 'three': -3, 'four': -4}

print(a.keys())
print(a.values())
print(a.items())

a.keys()- итератор на ключи a.values() - итератор на значения a.items() - итератор на пары ключ - значение

a = {'one': 1, 'two': 2, 'three': 3}
b = {'two': -2, 'three': -3, 'four': -4}

b = a.copy()
a.clear()
print(a, b)

a.copy() - копирует словарь a.clear() - очищает словарь

Приведение к булевому типу

a = {'one': 1, 'two': 2, 'three': 3}
b = {'two': -2, 'three': -3, 'four': -4}

b = a.copy()
a.clear()
print(bool(a), bool(b))

пустой словарь является false, а остальные если там есть хотябы одно значение true.

Неизменяемые(immutable) и изменяемые(mutable) типы данных

Неизменяемые - строки, кортежи, range;

Изменяемые - список и словарь.

Неизменяемые коллекции в отличие от изменяемых имеют встроенный метод hash - это свойство дает им возможность быть ключом в структуре данных словарь и такие контейнеры могут быть членами в структуре множеств.

Time: 17:10 https://education.vk.company/curriculum/program/lesson/25059/