# -*- coding: utf-8 -*-

#---------------------------------------------- Множества ----------------------------------------------

s = set() # пустое множество
s = {1, 5, 10}
s = set( [1, 5, 10] ) # то же самое, что в предыдущей строке, разница в том
s.add(1) # не добавится, уже есть
s.add(2)
s.add(3)
print(s) # не упорядоченное множества
print(1 in s, 4 in s) # True, False

t = {1, 5, 9}
print(s & t) # пересечение
print(s | t)  # объединение
#print(sub(s, t))

#---------------------------------------------- Словари ----------------------------------------------

x = {} # Создать пустой словарь
x["a"] = 1 # Добавить туда один элемент (пару <ключ, значение>)
print(x)
x = {"a" : 1} # Можно писать короче
print(x)
x = dict([("a", 1)]) # Можно создавать словарь по уже готовому списку
print(x)

x = {"a" : 3, "b" : 4, "c" : 7, 100 : 200} # в словаре хранятся пары <ключ, значение>, можно хранить разные типы
print(x)
print(x["a"]) # словарём можно пользоваться как массивом
print(x[100])
x["a"] += 10
print(x["a"])
if not ("d" in x):
  x["d"] = 1 # если нет, создать
else:
  x["d"] += 1 # иначе увеличить на 1
#print(x["e"]) # exception! нельзя обращаться к несуществующем элементу

#---------------------------------------------- Ещё ----------------------------------------------

print(x.items()) # вывели все пары из словаря
print(sorted(filter(lambda x : type(x[0]) == str, x.items()))) # взяли все пары, в которых первый элемент -- строка, и отсортировали

# Преобразование между списками и множествами
print(list(s))
print(set([1, 2, 3]))
print(list(set([1, 2, 3]) & set([1, 2, 4]))) # пересечение двух списков через множества
#print([1, 2, 3] & [1, 2, 4]) # а напрямую списки нельзя пересекать