# Решение на BiDict от Николина Ефтимова

Обратно към всички решения

Към профила на Николина Ефтимова

## Резултати

• 5 точки от тестове
• 0 бонус точки
• 5 точки общо
• 12 успешни тест(а)
• 4 неуспешни тест(а)

## Код

import collections
class BiDict(dict):
def __getkey__(self, value):
for item in self.items():
if item[1] == value:
return item[0]
raise KeyError
def __setitem__(self, key, value):
if not isinstance(value, collections.Hashable):
raise TypeError
if value in self.values():
old_key = self.__getkey__(value)
self.pop(old_key)
dict.__setitem__(self, key, value)
def BiDict(self, constr_arg):
d = dict(constr_arg)
for item in d.items():
self.__setitem__(item[0], item[1])
def inverse(self):
d = BiDict()
for item in self.items():
d[item[1]] = item[0]
self.clear()
self.update(d)
return self
def update(self, constr_arg):
d = dict(constr_arg)
for item in d.items():
self.__setitem__(item[0], item[1])

## Лог от изпълнението

..EE....F.F.....
======================================================================
ERROR: test_circular_values (__main__.BiDictTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test20120627-22085-1l3mx1o", line 49, in test_circular_values
circular = self.solutions.BiDict({1: 2, 2: 3, 3: 1})
AttributeError: 'BiDictTestCase' object has no attribute 'solutions'

======================================================================
ERROR: test_copied_circular_values (__main__.BiDictTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test20120627-22085-1l3mx1o", line 57, in test_copied_circular_values
inversed_circular.inverse()
AttributeError: 'dict' object has no attribute 'inverse'

======================================================================
FAIL: test_insert_existing_key_with_existing_value (__main__.BiDictTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test20120627-22085-1l3mx1o", line 78, in test_insert_existing_key_with_existing_value
self.assertNotIn('age', new_person.keys())
AssertionError: 'age' unexpectedly found in dict_keys(['age', 'name', 'sex'])

======================================================================
FAIL: test_insert_none_existing_key_with_existing_value (__main__.BiDictTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test20120627-22085-1l3mx1o", line 92, in test_insert_none_existing_key_with_existing_value
self.assertNotIn('age', new_person.keys())
AssertionError: 'age' unexpectedly found in dict_keys(['age', 'name', 'none', 'sex'])

----------------------------------------------------------------------
Ran 16 tests in 0.003s

FAILED (failures=2, errors=2)

## История (1 версия и 0 коментара)

### Николина обнови решението на 18.04.2012 20:13 (преди над 12 години)

+import collections
+
+
+class BiDict(dict):
+
+ def __getkey__(self, value):
+
+ for item in self.items():
+ if item[1] == value:
+ return item[0]
+ raise KeyError
+
+ def __setitem__(self, key, value):
+
+ if not isinstance(value, collections.Hashable):
+ raise TypeError
+ if value in self.values():
+ old_key = self.__getkey__(value)
+ self.pop(old_key)
+ dict.__setitem__(self, key, value)
+
+ def BiDict(self, constr_arg):
+
+ d = dict(constr_arg)
+ for item in d.items():
+ self.__setitem__(item[0], item[1])
+
+ def inverse(self):
+
+ d = BiDict()
+ for item in self.items():
+ d[item[1]] = item[0]
+ self.clear()
+ self.update(d)
+ return self
+
+ def update(self, constr_arg):
+
+ d = dict(constr_arg)
+ for item in d.items():
+ self.__setitem__(item[0], item[1])