Skip to content

Instantly share code, notes, and snippets.

@cascad-s
Created August 24, 2016 22:28
Show Gist options
  • Save cascad-s/c39db32700bd170f8745180cac10cfcd to your computer and use it in GitHub Desktop.
Save cascad-s/c39db32700bd170f8745180cac10cfcd to your computer and use it in GitHub Desktop.
very useful when working with information from erlang
def is_pair(item):
if isinstance(item, list):
if len(item) == 2:
if isinstance(item[0], str): # and isinstance(item[1], list)
return True
return False
def is_pairs_list(item):
if isinstance(item, list):
if len(item) > 0:
return all(map(is_pair, item))
return False
def nested_dict2pairs(dicts):
pairs = []
for k, v in dicts.items():
if isinstance(v, dict):
pairs.append([k, nested_dict2pairs(v)])
else:
pairs.append([k, v])
return pairs
def nested_pairs2dict(pairs):
d = {}
if is_pairs_list(pairs):
for k, v in pairs:
d[k] = nested_pairs2dict(v)
return d
elif is_pair(pairs):
k, v = pairs
d[k] = nested_pairs2dict(v)
return d
elif isinstance(pairs, dict):
for k, v in pairs.items():
d[k] = nested_pairs2dict(v)
return d
else:
return pairs
if __name__ == "__main__":
from pprint import pprint
ex = ["rating", [["key_1", ["key_11", [["key_111", "val_111"], ["key_112", "val_112"], ["key_113", "val_113"]]]],
["key_2", "value_2"], ["key_3", "value_3"]]]
ex2 = {"rating": {"key2": {"key3": [1, 2, 3], "key4": "123"}, "key2_2": {"key3_1": [4, 5], "key3_2": []}}}
# pprint(nested_pairs2dict(ex))
# pprint(nested_dict2pairs(ex2))
print(nested_pairs2dict(nested_dict2pairs(nested_pairs2dict(ex))) == nested_pairs2dict(ex))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment