Пять способов создать словарь
Словарь -- структура, которая позволяет хранить данные в формате ключ-значение. Словари удобны для того, чтобы передавать информацию внутри программы, они быстрые, легко конвертируются в формат JSON, который используется в http запросах, и поэтому являются одним из главных инструментов разработчика.
Я знаю пять (!) способов создать словарь в Python. С помощью литералов словаря:
И последний, который я использую, когда мне надо взять ключи из одного контейнера, а значения из другого:
#типы_данных #словари #основы #перед_собесом #comprehensions #загадка
Словарь -- структура, которая позволяет хранить данные в формате ключ-значение. Словари удобны для того, чтобы передавать информацию внутри программы, они быстрые, легко конвертируются в формат JSON, который используется в http запросах, и поэтому являются одним из главных инструментов разработчика.
Я знаю пять (!) способов создать словарь в Python. С помощью литералов словаря:
fish = {
"move": "water",
"eat": "insects",
"say": None
}
Используя конструктор явно: snail = dict(
eat=”leaves”,
move=”ground”,
say=None
)
Или инициализируя его кортежами: cow = dict([
(“move”, “ground”),
(“eat”, “grass”),
(“say, “moo”)
])
Четвертый, с помощью генераторных выражений (версия интерпретатора 3.5 и выше):>>> animals = [“snail”, “fish”, “cow”]
>>> {animal: it for it, animal in enumerate(animals)}
{'snail': 0, 'fish': 1, 'cow': 2}
Этот трюк еще бывает полезен, если нужно поменять местами ключи и значения:>>> {v: k for k, v in animals.items()}
{1: 'snail', 2: 'fish', 3: 'cow’}
Только будьте осторожны, потому что ключи в словаре должны быть уникальны. Если какие-то значения исходного словаря совпадали, то, когда они станут ключами нового, дубликаты исчезнут. И последний, который я использую, когда мне надо взять ключи из одного контейнера, а значения из другого:
>>> animals = ["frog", "snail", "bird"]
>>> numbers = [1, 2, 3]
>>> dict(zip(animals, numbers))
{'snail': 2, 'frog': 1, 'bird': 3}
Почему так много? Потому что каждый удобен под свой случай.🐍#типы_данных #словари #основы #перед_собесом #comprehensions #загадка
🔥3
Введение в множества
Set' ы в Python реализованы так, что максимально напоминают математические множества. Давайте пройдемся по основным свойствам и возможностям множеств в Python, и разберемся, как их использовать.
В математике множество -- это набор объектов произвольной природы. В Python множество тоже может содержать переменные разных типов, например:
Инициализировать множество можно используя фигурные скобки или через конструктор класса
В версиях интерпретатора 2.7 и выше работают set comprehensions:
Над множествами в Python можно делать те же операции, что и в математике: находить объединение, пересечение, проверять принадлежность к множеству и так далее. Для этого можно пользоваться операторами, а можно методами множеств:
И еще у класса
И напоследок: один раз я больно отстрелила себе ногу, когда хотела добавить составной элемент в множество с помощью неправильного инструмента. Например, если у нас есть множество строк и мы пытаемся добавить в него еще один элемент вот так:
В общем, Python set'ы сильно напоминают математические множества: могут содержать объекты разных типов, требуют уникальности элементов, не сохраняют порядок и имеют методы, позволяющие их объединять, пересекать, etc... Кроме того, множества имеют интерфейс для работы с ними как с коллекциями.
Как определиться в выборе коллекции?
🐙 Если важен порядок — используйте списки.
🐙 Если нужно отображение ключ-значение — используйте словари.
🐙 Если нужен набор уникальных элементов — используйте множества.
#основы #типы_данных #comprehensions #списки #селяви #коллекции
Set' ы в Python реализованы так, что максимально напоминают математические множества. Давайте пройдемся по основным свойствам и возможностям множеств в Python, и разберемся, как их использовать.
В математике множество -- это набор объектов произвольной природы. В Python множество тоже может содержать переменные разных типов, например:
Но есть одно ограничение: элементы множества должны быть хэшируемыми: например, в множество можно добавить строки, числа и кортежи, но нельзя словари и списки:
>>> A = {"My hovercraft is full of eels", 42, (3.14, 2.72)}
При этом поскольку сами множества мутабельны, то множество множеств, как в известном парадоксе про брадобрея, сделать не получится. Но если очень хочется, можно использовать frozenset’ы: эти объекты в остальном ведут себя почти так же, но они иммутабельны и их можно добавить в множество.
>>> A.add([-1, 0])
TypeError: unhashable type: 'list'
Инициализировать множество можно используя фигурные скобки или через конструктор класса
set()
. Эти инициализации эквивалентны:Только не запутайтесь: такая инструкция
>>> B = {1, 2, 3}
>>> B = set((1, 2, 3))
создаст не множество, а словарь.
C = {}
В версиях интерпретатора 2.7 и выше работают set comprehensions:
Элементы множества, как и в математике, должны быть уникальными. На практике этим пользуются для того, чтобы исключить повторяющиеся элементы:
>>> C = {x for x in range(1, 5)}
>>> C
{1, 2, 3, 4}
Кстати, множества не сохраняют порядок, поэтому если он нужен, то добро пожаловать в списки. Из-за того, что порядка нет, во множествах нет ни индексирования, ни слайсов. В то же время циклы по множеству можно делать обычным pythonic-способом:
>>> D = [1, 2, 3, 3]
>>> D = list(set(D))
>>> D
[1, 2, 3]
>>> for elem in C:
... print(elem)
Над множествами в Python можно делать те же операции, что и в математике: находить объединение, пересечение, проверять принадлежность к множеству и так далее. Для этого можно пользоваться операторами, а можно методами множеств:
Обратите внимание, что операторы принимают только set’ы, а методы -- любые iterable контейнеры. Есть мнение, что операторы менее читаемые, но оба подхода в целом равноправны.
A | B A.union(B)
A & B A.intersection(B)
A - B A.difference(B)
A <= B A.issubset(B)
A => B A.issuperset(B)
…
И еще у класса
set
есть методы, которые удобны для работы со множествами как с коллекциями: add()
— добавить элемент, remove()
— удалить элемент, pop()
— извлечь с удалением, update()
— объединить с другим множеством,clear()
— очистить множество. И напоследок: один раз я больно отстрелила себе ногу, когда хотела добавить составной элемент в множество с помощью неправильного инструмента. Например, если у нас есть множество строк и мы пытаемся добавить в него еще один элемент вот так:
то получаем ожидаемый результат:
>>> F = {"Seregia", "Vasia"}
>>> F.update("Alisa")
Это абсолютно валидный код и он отработает, поэтому такую ошибку по невнимательности можно искать довольно долго. Так что не попадайте в ловушку методов
>>> F
{'l', 'a', 'Seregia', 'Vasia', 'A', 'i', 's'}
add()
и update()
. В общем, Python set'ы сильно напоминают математические множества: могут содержать объекты разных типов, требуют уникальности элементов, не сохраняют порядок и имеют методы, позволяющие их объединять, пересекать, etc... Кроме того, множества имеют интерфейс для работы с ними как с коллекциями.
Как определиться в выборе коллекции?
🐙 Если важен порядок — используйте списки.
🐙 Если нужно отображение ключ-значение — используйте словари.
🐙 Если нужен набор уникальных элементов — используйте множества.
#основы #типы_данных #comprehensions #списки #селяви #коллекции
👍2