Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from collections import defaultdict
- def split_d(d, key):
- include = defaultdict(list)
- exclude = defaultdict(list)
- for i in range(0, len(d[key])):
- binary = d[key][i]
- for k, v in d.items():
- if k == key:
- continue
- if binary == 0:
- exclude[k].append(v[i])
- elif binary == 1:
- include[k].append(v[i])
- else:
- raise ValueError(f"Key {key} is not binary. Expected values 0 or 1")
- return include, exclude
- d = {
- 'prof': [1,0,0,1,1,1,1,1,0,1],
- 'val': [45,12,36,48,48,59,5,4,32,7]
- }
- print(split_d(d, 'prof'))
- import itertools
- def split_d(d, key, val):
- assert set(d[key]) == {0, 1}
- sorted_tuples = sorted(zip(d[key], d[val]), key=lambda x: x[0])
- grouped = itertools.groupby(sorted_tuples, lambda x: x[0])
- return [{'val': [x[1] for x in g]} for _, g in grouped]
- In [52]: %timeit split_d_g(d, 'prof', 'val')
- 5.63 µs ± 68.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
- In [53]: %timeit split_d_op(d, 'prof')
- 6.82 µs ± 597 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Add Comment
Please, Sign In to add comment