Пет малки функции

Предадени решения

Краен срок:
23.03.2015 17:00
Точки:
10

Срокът за предаване на решения е отминал

Вашата задача е да имплементирате следните пет малки функции.

extract_type

При подаден архивиран текст под формата на списък от типа [(<символ[и]>, <брой повторения>), ...], да върне само символите от подаден тип като втори аргумент.

>>> print(extract_type([('f', 1), (5, 10), ('i', 1), (0.3, 100),
                        ('z', 2), ('bu', 1), ('z', 2)], str))
'fizzbuzz'

reversed_dict

Приема речник и връща речник, като за всяка двойка (ключ, стойност) от оригиналния речник в резултатния речник трябва да присъства двойка (стойност, ключ). Ако в оригиналния речник има две равни стойности, сте свободни в резултата да игнорирате всички освен една.

>>> print(reversed_dict({
    "Israel": "Jerusalem",
    "Austria": "Vienna",
    "Palestine": "Jerusalem",
    "Sweden": "Stockholm"
}))
{'Jerusalem': 'Israel', 'Stockholm': 'Sweden', 'Vienna': 'Austria'}

Забележка: Допускате, че всяка стойност в подадения речник е hashable

flatten_dict

Приема речник и връща речник, като за всяка двойка (<ключ>, <стойност>), ако стойността е речник (<ключ'>, <стойност'>), в резултата се добавя нов ключ от типа <ключ>.<ключ'> със стойност <стойност'>.

Тоест при подаден следния речник като аргумент:

{
    'a': 1,
    'c': {
        'a': 2,
        'b': {
            'x': 5,
            'y' : 10,
        }
    },
    'd': [1, 2, 3],
}

се очаква следния резултат:

{
    'a': 1,
    'c.a': 2,
    'c.b.x': 5,
    'c.b.y': 10,
    'd': [1, 2, 3],
}

Забележка: Допускате, че всеки ключ в речник е от тип str.

unflatten_dict

Имплементира противоположното действие на flatten_dict. Т.е. при подаден речник като аргумент:

{
    'a': 1,
    'c.a': 2,
    'c.b.x': 5,
    'c.b.y': 10,
    'd': [1, 2, 3],
}

се очаква следния резултат:

{
    'a': 1,
    'c': {
        'a': 2,
        'b': {
            'x': 5,
            'y' : 10,
        }
    },
    'd': [1, 2, 3],
}

reps

Приема списък или кортеж и връща нов кортеж, в който всички елементи, които НЕ се повтарят в подадената като аргумент колекция липсват. Повторенията и тяхната поредност на останалите елементи се запазват.

Пример:

>>> reps([1, 4, 2, 6, 7, 2, 4, 11, 1, 9, 0, 2, 5, 3, 1])
(1, 4, 2, 2, 4, 1, 2, 1)