# Решение на BiDict от Илиян Киряков

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

Към профила на Илиян Киряков

## Резултати

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

## Код

class BiDict(dict):
def __init__(self, *args, **kwargs):
super(BiDict, self).__init__()
for element in args:
for key, value in element.items():
hash(key)
hash(value)
self[key] = value
for key, value in kwargs.items():
hash(key)
hash(value)
self[key] = value
def __setitem__(self, argument_key, argument_value):
hash(argument_value)
hash(argument_key)
equal_values = False
for key_in_dict, value_in_dict in self.items():
if self[key_in_dict] == argument_value:
equal_values = True
key_for_delete = key_in_dict
if equal_values == True:
del self[key_for_delete]
super().__setitem__(argument_key, argument_value)
def update(self, update_of_dict):
for key, value in update_of_dict.items():
hash(key)
hash(value)
self[key] = value
def inverse(self):
stack = []
copy_of_our_dict = {}
for key, value in self.items():
copy_of_our_dict = {value: key}
stack.append(copy_of_our_dict)
self.clear()
for inversed_dict in stack:
self.update(inversed_dict)

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

..EE....F.F.....
======================================================================
ERROR: test_circular_values (__main__.BiDictTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test20120627-22085-uisjih", 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-uisjih", 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-uisjih", 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-uisjih", 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 коментара)

### Илиян обнови решението на 19.04.2012 10:37 (преди над 8 години)

+class BiDict(dict):
+
+ def __init__(self, *args, **kwargs):
+ super(BiDict, self).__init__()
+ for element in args:
+ for key, value in element.items():
+ hash(key)
+ hash(value)
+ self[key] = value
+ for key, value in kwargs.items():
+ hash(key)
+ hash(value)
+ self[key] = value
+
+ def __setitem__(self, argument_key, argument_value):
+ hash(argument_value)
+ hash(argument_key)
+ equal_values = False
+ for key_in_dict, value_in_dict in self.items():
+ if self[key_in_dict] == argument_value:
+ equal_values = True
+ key_for_delete = key_in_dict
+ if equal_values == True:
+ del self[key_for_delete]
+ super().__setitem__(argument_key, argument_value)
+
+ def update(self, update_of_dict):
+ for key, value in update_of_dict.items():
+ hash(key)
+ hash(value)
+ self[key] = value
+
+ def inverse(self):
+ stack = []
+ copy_of_our_dict = {}
+ for key, value in self.items():
+ copy_of_our_dict = {value: key}
+ stack.append(copy_of_our_dict)
+ self.clear()
+ for inversed_dict in stack:
+ self.update(inversed_dict)