Валидация скобок
Словарь хранит соответствия закрывающих и открывающих скобок, список работает как стек.
def is_valid_brackets(text):
pairs = {")": "(", "]": "[", "}": "{"}
stack = []
for char in text:
if char in pairs.values():
stack.append(char)
elif char in pairs:
if not stack or stack.pop() != pairs[char]:
return False
return not stack
print(is_valid_brackets("([)]"))
print(is_valid_brackets("({[]})"))Реверс словаря с повторяющимися значениями
setdefault() избавляет от проверки наличия ключа перед append().
def reverse_dictionary(data):
result = {}
for key, value in data.items():
result.setdefault(value, []).append(key)
return result
print(reverse_dictionary({"a": 1, "b": 2, "c": 1, "d": 3}))Распределение студентов по баллам
Функция возвращает новую структуру и не меняет исходный словарь студентов.
def group_students(students):
groups = {"Отличники": {}, "Хорошисты": {}, "Троечники": {}, "Не сдали": {}}
for name, score in students.items():
if score >= 85:
groups["Отличники"][name] = score
elif score >= 70:
groups["Хорошисты"][name] = score
elif score >= 50:
groups["Троечники"][name] = score
else:
groups["Не сдали"][name] = score
return groups
students = {"Аня": 92, "Боря": 76, "Ваня": 65, "Галя": 48}
print(group_students(students))