Ивайло обнови решението на 17.03.2015 12:11 (преди над 9 години)
+from itertools import groupby
+
+
+def extract_type(items, target_type):
+ return ''.join(a * b for (a, b) in items if type(a) is target_type)
+
+
+def reversed_dict(d):
+ return {v: k for k, v in d.items()}
+
+
+def flatten_dict(d):
+ result = {}
+ for a, b in d.items():
+ if type(b) is dict:
+ for i_a, i_b in flatten_dict(b).items():
+ result[a + '.' + i_a] = i_b
+ else:
+ result[a] = b
+ return result
+
+
+def unflatten_dict(d):
+ result = {}
+ for a, b in d.items():
+ a = a.split('.')
+ target = result
+ while len(a) > 1:
+ if a[0] not in target:
+ target[a[0]] = dict()
+ target = target[a[0]]
+ a = a[1:]
+ target[a[0]] = b
+ return result
+
+
+def reps(a):
+ allowed = {i for i, g in groupby(sorted(a)) if len(list(g)) > 1}
+ return tuple(i for i in a if i in allowed)
- Тествай
extract_type
с различни типове - Избери малко по-добри имена. Какво значи
i_a
?
Какви други типове се очаква да се подават? Поведението не е много добре дефинирано в условието (даже въобще) за други типове. Не разбирам дали поведението на ''.join()
е грешно или type(a) is b
се очаква да бъде isinstance(a, b)
, но условието е доста общо...
Предвид, че първия цикъл използва (a, b)
, втория просто има префикс i_
, което е съкратено от inner_
. Ако ви харесва, ще сложа 3х по-дълги имена на променливите, но не съм убеден дали в случая ще направи кода по-четим.
- Не е грешно, погледни коментарите във форумите за тази функция и ще разбереш кое пропускаш. Всички неясноти и пропуски в условието се изчистват там.
-
a
иb
също не са добри имена. Защо да не ги кръстишkey
иvalue
? - Python се стреми да е доста описател и умерено дългите имена доста биха помогнали за целта :)