BiDict

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

Краен срок:
19.04.2012 18:50
Точки:
6

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

Bidirectional dict

Знаем, че ключовете във всеки речник трябва да бъдат уникални и непроменящи се(immutable). От Вас искаме да създадете нов тип, наречен BiDict, в който същите условия за ключовете да бъдат задължитлени и за стойностите. Целта на занятието е да можем да разменяме по всяко време ключовете със стойности и обратно.

Или иначе казано трябва ни структура, с уникални двойки, които да се държат като речник. BiDict приема dict за аргумент и размяната на ключовете със стойности рябва да се случва с метода inverse на нашия BiDict.

Малко примерен код как бихме направили речник, съдържащ информация за Кънчо: >>> person = BiDict({'name': 'Кънчо', 'age': 18, 'sex': 'M'}) >>> person BiDict({'age': 18, 'name': 'Кънчо', 'sex': 'M'}) >>> person.inverse() >>> person BiDict({18: 'age', 'M': 'sex', 'Кънчо': 'name'})

Обърнете внимание, че BiDict.inverse не връща нов обект, а променя текущия.

Както знаете, ако се опитаме да зададем unhashable тип като ключ на речник получаваме TypeError. Очакваме да се случва същото и при опит да бъде задаван unhashable обект като стойност на ключ в нашия BiDict: >>> person['favorite_sports'] = ['football', 'tennis', 'boxing'] #[...] TypeError: unhashable type: 'list'

BiDict трябва да се държи като вграденият dict във всички останали случаи.