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