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
във всички останали случаи.