Йордан обнови решението на 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
. По мое мнение това не е довело до добър резултат, но поне съм сигурен, че ги знаеш добре :)