Not a member of Pastebin yet?
                        Sign Up,
                        it unlocks many cool features!                    
                - ## get a nested value from a dictionary with only the final key ######################
 - ## a version for key/s AND indices [but no dType] at https://pastebin.com/G92TZnnK ###
 - ### example of usage in Example 1 at https://pastebin.com/5AjaUne0 ###################
 - ## [ specifying data type of value with dType is optional ]
 - # a generator for the values
 - def yield_by_nested_keys(obj:dict, *keys, dType=None):
 - if not keys or not isinstance(obj,(dict,list,set,tuple)): return
 - if not isinstance(obj, dict):
 - for v in obj:
 - for y in yield_by_nested_keys(v,*keys,dType=dType): yield y
 - return
 - if len(keys)==1 and keys[0] in obj:
 - if dType is None or isinstance(obj[keys[0]], dType):
 - yield_list = obj[keys[0]] if dType==list else [obj[keys[0]]]
 - for y in yield_list: yield y
 - for k, v in obj.items():
 - next_keys = keys[1:] if k==keys[0] else keys
 - for y in yield_by_nested_keys(v,*next_keys,dType=dType): yield y
 - # returns either a list [if returnAll is True] or a single value [or vDef]
 - '''NOTE: if dType is list and find_all is not set [i.e., not True], then
 - only the 1st item will be returned [or vDef if list is empty]'''
 - def get_by_nested_keys(obj:dict,*keys,dType=None,find_all=False,vDef=None):
 - v_generator = yield_by_nested_keys(obj, *keys, dType=dType)
 - if find_all: return list(v_generator)
 - for v in v_generator: return v
 - return vDef
 
Advertisement
 
                    Add Comment                
                
                        Please, Sign In to add comment