69 lines
1.6 KiB
Python
69 lines
1.6 KiB
Python
def find(findFn, l):
|
|
"""
|
|
Will return the first item matching the findFn
|
|
findFn: A function taking one param: value. MUST return a boolean
|
|
l: The list to search
|
|
"""
|
|
for item in l:
|
|
if findFn(item):
|
|
return item
|
|
return None
|
|
|
|
|
|
def find_dict(findFn, d):
|
|
"""
|
|
Will return the first value matching the findFn
|
|
findFn: A function taking two params: value, key. MUST return a boolean
|
|
d: The dict to search
|
|
"""
|
|
for k, v in d.iteritems():
|
|
if findFn(v, k):
|
|
return v
|
|
return None
|
|
|
|
|
|
def map_dict(mapFn, d):
|
|
"""
|
|
mapFn: A function taking two params: value, key
|
|
d: The dict to map
|
|
"""
|
|
return {k: mapFn(v, k) for k, v in d.iteritems()}
|
|
|
|
|
|
def filter_dict(filterFn, d):
|
|
"""
|
|
filterFn: A function taking two params: value, key. MUST return a boolean
|
|
d: The dict to filter
|
|
"""
|
|
return {k: v for k, v in d.iteritems() if filterFn(v, k)}
|
|
|
|
|
|
def reject_dict(filterFn, d):
|
|
"""
|
|
filterFn: A function taking two params: value, key. MUST return a boolean
|
|
d: The dict to filter
|
|
"""
|
|
def invert(*args, **kwargs):
|
|
return not filterFn(*args, **kwargs)
|
|
return filter_dict(invert, d)
|
|
|
|
|
|
def get_property(d, path, default=None):
|
|
def walk(sub_d, segment):
|
|
if sub_d is None:
|
|
return None
|
|
return sub_d.get(segment)
|
|
segments = path.split('.')
|
|
return reduce(walk, segments, d) or default
|
|
|
|
|
|
def merge_dicts(*args):
|
|
result = {}
|
|
for d in args:
|
|
result.update(d)
|
|
return result
|
|
|
|
|
|
def flatten(l):
|
|
return [item for sublist in l for item in sublist]
|