Skip to content

Instantly share code, notes, and snippets.

@kopyl
Last active May 26, 2021 17:21
Show Gist options
  • Select an option

  • Save kopyl/8e67b458dd324fd8f6d49b171ecbd31c to your computer and use it in GitHub Desktop.

Select an option

Save kopyl/8e67b458dd324fd8f6d49b171ecbd31c to your computer and use it in GitHub Desktop.
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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment