Решение на Пет малки функции от Галина Димитрова

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

Към профила на Галина Димитрова

Резултати

  • 10 точки от тестове
  • 0 бонус точки
  • 10 точки общо
  • 19 успешни тест(а)
  • 0 неуспешни тест(а)

Код

from copy import deepcopy
def extract_type(input_data, element_type):
result = ""
for element in input_data:
if type(element[0]) is element_type:
for i in range(element[1]):
result += str(element[0])
return result
def reversed_dict(base_dict):
reversed_dict = {value: key for key, value in base_dict.items()}
return reversed_dict
def expand_subdict(key, value):
if isinstance(value, dict):
return [(key + '.' + k, v) for k, v in flatten_dict(value).items()]
else:
return [(key, value)]
def flatten_dict(base_dict):
elements = [element for k, v in base_dict.items()
for element in expand_subdict(k, v)]
return dict(elements)
def reps(elements):
result = tuple(y for y in elements if elements.count(y) > 1)
return result
def combine(d, l):
if not l[0] in d:
d[l[0]] = {}
for v in l[1:]:
if type(v) == list:
combine(d[l[0]], v)
else:
d[l[0]] = v
def dict_merge(a, b):
if not isinstance(b, dict):
return b
result = deepcopy(a)
for k, v in b.items():
if k in result and isinstance(result[k], dict):
result[k] = dict_merge(result[k], v)
else:
result[k] = deepcopy(v)
return result
def unflatten_dict(base_dict):
elements = []
for key, value in base_dict.items():
items = reversed(key.split("."))
for item in items:
value = {item: value}
elements.append(value)
result = elements[0]
# [{'c': {'a': 2}}, {'c': {'b': {'x': 5}}}, {'c': {'b': {'y': 10}}}, {'d': [1, 2, 3]}, {'a': 1}]
for i in range(1, len(elements)):
result = dict_merge(result, elements[i])
return result

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

...................
----------------------------------------------------------------------
Ran 19 tests in 0.139s

OK

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

Галина обнови решението на 23.03.2015 10:29 (преди около 9 години)

+from copy import deepcopy
+
+
+def extract_type(input_data, element_type):
+ result = ""
+ for element in input_data:
+ if type(element[0]) is element_type:
+ for i in range(element[1]):
+ result += str(element[0])
+ return result
+
+
+def reversed_dict(base_dict):
+ reversed_dict = {value: key for key, value in base_dict.items()}
+ return reversed_dict
+
+
+def expand_subdict(key, value):
+ if isinstance(value, dict):
+ return [(key + '.' + k, v) for k, v in flatten_dict(value).items()]
+ else:
+ return [(key, value)]
+
+
+def flatten_dict(base_dict):
+ elements = [element for k, v in base_dict.items()
+ for element in expand_subdict(k, v)]
+ return dict(elements)
+
+
+def reps(elements):
+ result = tuple(y for y in elements if elements.count(y) > 1)
+
+ return result
+
+
+def combine(d, l):
+ if not l[0] in d:
+ d[l[0]] = {}
+
+ for v in l[1:]:
+ if type(v) == list:
+ combine(d[l[0]], v)
+ else:
+ d[l[0]] = v
+
+
+def dict_merge(a, b):
+ if not isinstance(b, dict):
+ return b
+ result = deepcopy(a)
+ for k, v in b.items():
+ if k in result and isinstance(result[k], dict):
+ result[k] = dict_merge(result[k], v)
+ else:
+ result[k] = deepcopy(v)
+ return result
+
+
+def unflatten_dict(base_dict):
+ elements = []
+
+ for key, value in base_dict.items():
+ items = reversed(key.split("."))
+ for item in items:
+ value = {item: value}
+ elements.append(value)
+ result = elements[0]
+# [{'c': {'a': 2}}, {'c': {'b': {'x': 5}}}, {'c': {'b': {'y': 10}}}, {'d': [1, 2, 3]}, {'a': 1}]
+ for i in range(1, len(elements)):
+ result = dict_merge(result, elements[i])
+
+ return result