Try95th

remove values and keys

Feb 18th, 2023 (edited)
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.30 KB | None | 0 0
  1. ## based on https://stackoverflow.com/a/60124334/6146136
  2.  
  3. def clean_vals(obj, *vals, allowFalse=True):
  4.     if not isinstance(obj, (dict,list,set,tuple)): return obj
  5.     if not vals: vals = [None]
  6.     if isinstance(obj, (list,set,tuple)):
  7.         return type(obj)([cv for cv in [
  8.             clean_vals(v, *vals, allowFalse=allowFalse)
  9.             for v in obj if not v in vals
  10.         ] if cv not in vals])
  11.     return {ck: cv for ck, cv in [
  12.         (k, clean_vals(v, *vals, allowFalse=allowFalse))
  13.         for k,v in obj.items() if not v in vals
  14.     ] if cv not in vals}
  15.  
  16. def removeNested(obj, *keys, parentKeys=[], chainKeys=True):
  17.     if not keys or not isinstance(obj, (dict,list,set,tuple)): return obj
  18.     if not chainKeys or any([isinstance(k, (list,tuple)) for k in keys]):
  19.         keys = [k if isinstance(k, (list,tuple)) else [k] for k in keys]
  20.         for k in keys: obj = removeNested(obj, *k, parentKeys=parentKeys)
  21.  
  22.     ski = -1*len(keys)
  23.     if isinstance(obj, (list,set,tuple)):
  24.          return type(obj)([removeNested(
  25.              v, *keys, parentKeys=parentKeys+[i]
  26.          ) for i,v in enumerate(obj) if tuple(parentKeys+[i])[ski:] != keys])
  27.     return {k: removeNested(
  28.         v, *keys, parentKeys=parentKeys+[k]
  29.     ) for k,v in obj.items() if tuple(parentKeys+[k])[ski:] != keys}
  30.  
Advertisement
Add Comment
Please, Sign In to add comment