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

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

Към профила на Йордан Пулов

Резултати

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

Код

from functools import reduce
def extract_type(to_extract, e_type):
tuples_left = filter(lambda x: isinstance(x, tuple) and len(x), to_extract)
type_check = filter(lambda x: isinstance(x[0], e_type), tuples_left)
needed = filter(lambda x: len(x) > 1 and isinstance(x[1], int), type_check)
to_string = map(lambda x: "{}".format(str(x[0]) * x[1]), needed)
return reduce(lambda x, y: "{}{}".format(x, y), to_string)
def reversed_dict(dict):
return {dict[x]: x for x in dict}
def reps(repeating):
return tuple([item for item in repeating if repeating.count(item) > 1])
def flatten_dict(to_flat):
flatten = {}
for x in to_flat:
if isinstance(to_flat[x], dict):
flatten_subdict = flatten_dict(to_flat[x])
for f_key in flatten_subdict:
new_key = "{}.{}".format(x, f_key)
flatten[new_key] = flatten_subdict[f_key]
else:
flatten[x] = to_flat[x]
return flatten
def unflatten_dict(flat):
unflatten = {}
for long_key in flat:
subkeys = long_key.split(".")
if(len(subkeys) == 1):
unflatten[long_key] = flat[long_key]
else:
sub_unflatten = unflatten
is_last = len(subkeys)
for key in subkeys:
is_last -= 1
if is_last == 0:
sub_unflatten[key] = flat[long_key]
elif isinstance(sub_unflatten.get(key, 1), int):
sub_unflatten[key] = {}
sub_unflatten = sub_unflatten[key]
return unflatten

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

...................
----------------------------------------------------------------------
Ran 19 tests in 0.143s

OK

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

Йордан обнови решението на 22.03.2015 16:56 (преди над 9 години)

+from functools import reduce
+
+
+def extract_type(to_extract, e_type):
+ tuples_left = filter(lambda x: isinstance(x, tuple) and len(x), to_extract)
+ type_check = filter(lambda x: isinstance(x[0], e_type), tuples_left)
+ needed = filter(lambda x: len(x) > 1 and isinstance(x[1], int), type_check)
+ to_string = map(lambda x: "{}".format(str(x[0]) * x[1]), needed)
+ return reduce(lambda x, y: "{}{}".format(x, y), to_string)
+
+
+def reversed_dict(dict):
+ return {dict[x]: x for x in dict}
+
+
+def reps(repeating):
+ return tuple([item for item in repeating if repeating.count(item) > 1])
+
+
+def flatten_dict(to_flat):
+ flatten = {}
+ for x in to_flat:
+ if isinstance(to_flat[x], dict):
+ flatten_subdict = flatten_dict(to_flat[x])
+ for f_key in flatten_subdict:
+ new_key = "{}.{}".format(x, f_key)
+ flatten[new_key] = flatten_subdict[f_key]
+ else:
+ flatten[x] = to_flat[x]
+ return flatten
+
+
+def unflatten_dict(flat):
+ unflatten = {}
+ for long_key in flat:
+ subkeys = long_key.split(".")
+ if(len(subkeys) == 1):
+ unflatten[long_key] = flat[long_key]
+ else:
+ sub_unflatten = unflatten
+ is_last = len(subkeys)
+ for key in subkeys:
+ is_last -= 1
+ if is_last == 0:
+ sub_unflatten[key] = flat[long_key]
+ elif isinstance(sub_unflatten.get(key, 1), int):
+ sub_unflatten[key] = {}
+ sub_unflatten = sub_unflatten[key]
+
+ return unflatten
  • махни тази проверка и очаквай само коректни данни: filter(lambda x: isinstance(x, tuple) and len(x), to_extract)
  • допусни, че в подадения текст няма нищо за връщане от този тип

Иначе... уау. Избухнал си с map, filter и reduce. По мое мнение това не е довело до добър резултат, но поне съм сигурен, че ги знаеш добре :)