astrXbian/.install/.kodi/addons/plugin.video.arteplussept/resources/lib/hof.py

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]