Skip to content

Instantly share code, notes, and snippets.

@kopyl
Created July 23, 2021 09:45
Show Gist options
  • Select an option

  • Save kopyl/92857babb73b46baa18f037ac3bbb0d4 to your computer and use it in GitHub Desktop.

Select an option

Save kopyl/92857babb73b46baa18f037ac3bbb0d4 to your computer and use it in GitHub Desktop.
SuperDict
class SuperDict(dict):
def convert_dict_to_SuperDict(self, key, value):
if type(value) == dict:
self[key] = self.__class__(value)
if type(value) == list:
for n, item in enumerate(value):
if type(item) == dict:
self[key][n] = self.__class__(item)
def __init__(self, input_dict={}):
super().__init__(input_dict)
for key, value in input_dict.items():
setattr(self, key, value)
self.convert_dict_to_SuperDict(key, value)
def __setitem__(self, key, value):
super().__setitem__(key, value)
setattr(self, key, value)
self.convert_dict_to_SuperDict(key, value)
def __getitem__(self, key):
return getattr(self, key)
def __setattr__(self, key, value):
super().__setattr__(key, value)
self.convert_dict_to_SuperDict(key, value)
self.update({key: value})
def __getattr__(self, attribute):
... # if self.not_existing_attr:
def keys(self):
keys = list(self.__dict__.keys())
return keys
def values(self):
values = list(self.__dict__.values())
return values
def values_all(self):
def get_values(input_dict, values=[]):
for value in input_dict.values():
if isinstance(value, dict):
get_values(value)
else:
values.append(value)
return values
return get_values(self)
def keys_all(self):
def get_keys(input_dict, keys=[]):
for key, value in input_dict.items():
if isinstance(value, dict):
keys.append(key)
get_keys(value)
else:
keys.append(key)
return keys
return get_keys(self)
def items_all(self):
def get_items(input_dict, items=[]):
for key, value in input_dict.items():
if not isinstance(value, dict):
items.append({key: value})
else:
get_items(value)
pass
return items
return get_items(self)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment