Skip to main content

No more sleepless nights due to a nested dict, json, list or whatsoever

Project description

No more sleepless nights due to a nested dict, json, list or whatsoever

A convenient way to handle nested iterables! Works only with Python 3.9 and up!

Updates

2022/09/30: Fixed some problems with ProtectedDict and ProtectedList,ProtectedTuple

2022/09/30: Can be used as a generator now: from flatten_any_dict_iterable_or_whatsoever import fla_tu

2022/09/30: New functions: get_from_original_iter,set_in_original_iter, create_random_dict

2022/09/30: Added doc strings

How to use the new functions get_from_original_iter,set_in_original_iter,

data={'level1': {'t1': {'s1': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9},
                   's2': {'col1': 1, 'col2': 5, 'col3': 4, 'col4': 8},
                   's3': {'col1': 11, 'col2': 8, 'col3': 2, 'col4': 9},
                   's4': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9}},
                   ....]
list(fla_tu(data))

    [(5, ('level1', 't1', 's1', 'col1')),
     (4, ('level1', 't1', 's1', 'col2')),
     (4, ('level1', 't1', 's1', 'col3')),
     (9, ('level1', 't1', 's1', 'col4')),
     ....]

#After having flattened the iterable using fla_tu(), you will have a list of tuples:
#You can use now:

get_from_original_iter(iterable=data, keys=('level1', 't1', 's1', 'col1'))
Out[6]: 5
#to access the values.

set_in_original_iter(iterable=data, keys=('level1', 't1', 's1', 'col1'), value=1000000000000000000)
#to change values of the ORIGINAL ITERABLE!.


Out[8]:
{'level1': {'t1': {'s1': {'col1': 1000000000000000000,
    'col2': 4,
    'col3': 4,
    'col4': 9},
   's2': {'col1': 1, 'col2': 5, 'col3': 4, 'col4': 8},
   's3': {'col1': 11, 'col2': 8, 'col3': 2, 'col4': 9},
   's4': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9}},

THIS FUNCTION RETURNS >>>NONE<<<
BECAUSE IT CHANGES THE ORIGINAL ITERABLE!

    BE CAREFUL WHAT YOU ARE DOING!!

#DON'T USE data=set_in_original_iter(iterable=data, keys=('level1', 't1', 's1', 'col1'), value=1000000000000000000)


#If you still need the original data, use:

from copy import deepcopy
data2 = deepcopy(data)
list(fla_tu(data))
set_in_original_iter(iterable=data, keys=('level1', 't1', 's1', 'col1'), value=1000000000000000000)
data will be changed
data2 remains unchanged
from flatten_any_dict_iterable_or_whatsoever import ProtectedList,ProtectedDict,ProtectedTuple
from flatten_any_dict_iterable_or_whatsoever import fla_tu

#without protection
data={'level1': {'t1': {'s1': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9},
                   's2': {'col1': 1, 'col2': 5, 'col3': 4, 'col4': 8},
                   's3': {'col1': 11, 'col2': 8, 'col3': 2, 'col4': 9},
                   's4': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9}},
            't2': {'s1': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9},
                   's2': {'col1': 1, 'col2': 5, 'col3': 4, 'col4': 8},
                   's3': {'col1': 11, 'col2': 8, 'col3': 2, 'col4': 9},
                   's4': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9}},
            't3': {'s1': {'col1': 1, 'col2': 2, 'col3': 3, 'col4': 4},
                   's2': {'col1': 5, 'col2': 6, 'col3': 7, 'col4': 8},
                   's3': {'col1': 9, 'col2': 10, 'col3': 11, 'col4': 12},
                   's4': {'col1': 13, 'col2': 14, 'col3': 15, 'col4': 16}}},
 'level2': {'t1': {'s1': {'col1': 5, 'col2': 4, 'col3': 9, 'col4': 9},
                   's2': {'col1': 1, 'col2': 5, 'col3': 4, 'col4': 5},
                   's3': {'col1': 11, 'col2': 8, 'col3': 2, 'col4': 13},
                   's4': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 20}},
            't2': {'s1': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9},
                   's2': {'col1': 1, 'col2': 5, 'col3': 4, 'col4': 8},
                   's3': {'col1': 11, 'col2': 8, 'col3': 2, 'col4': 9},
                   's4': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9}},
            't3': {'s1': {'col1': 1, 'col2': 2, 'col3': 3, 'col4': 4},
                   's2': {'col1': 5, 'col2': 6, 'col3': 7, 'col4': 8},
                   's3': {'col1': 9, 'col2': 10, 'col3': 11, 'col4': 12},
                   's4': {'col1': 13, 'col2': 14, 'col3': 15, 'col4': 16}}}}
pprint(list(fla_tu(data)))

print('------------------------------------------')
#with protection
data={'level1': {'t1': {'s1': ProtectedDict({'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9}),
                   's2': {'col1': 1, 'col2': 5, 'col3': 4, 'col4': 8},
                   's3': {'col1': 11, 'col2': 8, 'col3': 2, 'col4': 9},
                   's4': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9}},
            't2': {'s1': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9},
                   's2': {'col1': 1, 'col2': 5, 'col3': 4, 'col4': 8},
                   's3': {'col1': 11, 'col2': 8, 'col3': 2, 'col4': 9},
                   's4': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9}},
            't3': ProtectedDict({'s1': {'col1': 1, 'col2': 2, 'col3': 3, 'col4': 4},
                   's2': {'col1': 5, 'col2': 6, 'col3': 7, 'col4': 8},
                   's3': {'col1': 9, 'col2': 10, 'col3': 11, 'col4': 12},
                   's4': {'col1': 13, 'col2': 14, 'col3': 15, 'col4': 16}})},
 'level2': {'t1': {'s1': {'col1': 5, 'col2': 4, 'col3': 9, 'col4': 9},
                   's2': {'col1': 1, 'col2': 5, 'col3': 4, 'col4': 5},
                   's3': {'col1': 11, 'col2': ProtectedList([8,3,5,23,'342342']), 'col3': 2, 'col4': 13},
                   's4': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 20}},
            't2': {'s1': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9},
                   's2': {'col1': 1, 'col2': 5, 'col3': 4, 'col4': 8},
                   's3': {'col1': 11, 'col2': 8, 'col3': 2, 'col4': 9},
                   's4': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9}},
            't3': {'s1': {'col1': 1, 'col2': (2,3,4,5), 'col3': ProtectedTuple((2,3,4,5,'32123')), 'col4': 4},
                   's2': {'col1': 5, 'col2': 6, 'col3': 7, 'col4': 8},
                   's3': {'col1': 9, 'col2': 10, 'col3': 11, 'col4': 12},
                   's4': {'col1': 13, 'col2': 14, 'col3': 15, 'col4': 16}}}}
pprint(list(list(fla_tu(data)))) #Without protection
[(5, ('level1', 't1', 's1', 'col1')),
 (4, ('level1', 't1', 's1', 'col2')),
 (4, ('level1', 't1', 's1', 'col3')),
 (9, ('level1', 't1', 's1', 'col4')),
 (1, ('level1', 't1', 's2', 'col1')),
 (5, ('level1', 't1', 's2', 'col2')),
 (4, ('level1', 't1', 's2', 'col3')),
 (8, ('level1', 't1', 's2', 'col4')),
 (11, ('level1', 't1', 's3', 'col1')),
 (8, ('level1', 't1', 's3', 'col2')),
 (2, ('level1', 't1', 's3', 'col3')),
 (9, ('level1', 't1', 's3', 'col4')),
 (5, ('level1', 't1', 's4', 'col1')),
 (4, ('level1', 't1', 's4', 'col2')),
 (4, ('level1', 't1', 's4', 'col3')),
 (9, ('level1', 't1', 's4', 'col4')),
 (5, ('level1', 't2', 's1', 'col1')),
 (4, ('level1', 't2', 's1', 'col2')),
 (4, ('level1', 't2', 's1', 'col3')),
 (9, ('level1', 't2', 's1', 'col4')),
 (1, ('level1', 't2', 's2', 'col1')),
 (5, ('level1', 't2', 's2', 'col2')),
 (4, ('level1', 't2', 's2', 'col3')),
 (8, ('level1', 't2', 's2', 'col4')),
 (11, ('level1', 't2', 's3', 'col1')),
 (8, ('level1', 't2', 's3', 'col2')),
 (2, ('level1', 't2', 's3', 'col3')),
 (9, ('level1', 't2', 's3', 'col4')),
 (5, ('level1', 't2', 's4', 'col1')),
 (4, ('level1', 't2', 's4', 'col2')),
 (4, ('level1', 't2', 's4', 'col3')),
 (9, ('level1', 't2', 's4', 'col4')),
 (1, ('level1', 't3', 's1', 'col1')),
 (2, ('level1', 't3', 's1', 'col2')),
 (3, ('level1', 't3', 's1', 'col3')),
 (4, ('level1', 't3', 's1', 'col4')),
 (5, ('level1', 't3', 's2', 'col1')),
 (6, ('level1', 't3', 's2', 'col2')),
 (7, ('level1', 't3', 's2', 'col3')),
 (8, ('level1', 't3', 's2', 'col4')),
 (9, ('level1', 't3', 's3', 'col1')),
 (10, ('level1', 't3', 's3', 'col2')),
 (11, ('level1', 't3', 's3', 'col3')),
 (12, ('level1', 't3', 's3', 'col4')),
 (13, ('level1', 't3', 's4', 'col1')),
 (14, ('level1', 't3', 's4', 'col2')),
 (15, ('level1', 't3', 's4', 'col3')),
 (16, ('level1', 't3', 's4', 'col4')),
 (5, ('level2', 't1', 's1', 'col1')),
 (4, ('level2', 't1', 's1', 'col2')),
 (9, ('level2', 't1', 's1', 'col3')),
 (9, ('level2', 't1', 's1', 'col4')),
 (1, ('level2', 't1', 's2', 'col1')),
 (5, ('level2', 't1', 's2', 'col2')),
 (4, ('level2', 't1', 's2', 'col3')),
 (5, ('level2', 't1', 's2', 'col4')),
 (11, ('level2', 't1', 's3', 'col1')),
 (8, ('level2', 't1', 's3', 'col2')),
 (2, ('level2', 't1', 's3', 'col3')),
 (13, ('level2', 't1', 's3', 'col4')),
 (5, ('level2', 't1', 's4', 'col1')),
 (4, ('level2', 't1', 's4', 'col2')),
 (4, ('level2', 't1', 's4', 'col3')),
 (20, ('level2', 't1', 's4', 'col4')),
 (5, ('level2', 't2', 's1', 'col1')),
 (4, ('level2', 't2', 's1', 'col2')),
 (4, ('level2', 't2', 's1', 'col3')),
 (9, ('level2', 't2', 's1', 'col4')),
 (1, ('level2', 't2', 's2', 'col1')),
 (5, ('level2', 't2', 's2', 'col2')),
 (4, ('level2', 't2', 's2', 'col3')),
 (8, ('level2', 't2', 's2', 'col4')),
 (11, ('level2', 't2', 's3', 'col1')),
 (8, ('level2', 't2', 's3', 'col2')),
 (2, ('level2', 't2', 's3', 'col3')),
 (9, ('level2', 't2', 's3', 'col4')),
 (5, ('level2', 't2', 's4', 'col1')),
 (4, ('level2', 't2', 's4', 'col2')),
 (4, ('level2', 't2', 's4', 'col3')),
 (9, ('level2', 't2', 's4', 'col4')),
 (1, ('level2', 't3', 's1', 'col1')),
 (2, ('level2', 't3', 's1', 'col2')),
 (3, ('level2', 't3', 's1', 'col3')),
 (4, ('level2', 't3', 's1', 'col4')),
 (5, ('level2', 't3', 's2', 'col1')),
 (6, ('level2', 't3', 's2', 'col2')),
 (7, ('level2', 't3', 's2', 'col3')),
 (8, ('level2', 't3', 's2', 'col4')),
 (9, ('level2', 't3', 's3', 'col1')),
 (10, ('level2', 't3', 's3', 'col2')),
 (11, ('level2', 't3', 's3', 'col3')),
 (12, ('level2', 't3', 's3', 'col4')),
 (13, ('level2', 't3', 's4', 'col1')),
 (14, ('level2', 't3', 's4', 'col2')),
 (15, ('level2', 't3', 's4', 'col3')),
 (16, ('level2', 't3', 's4', 'col4'))]
------------------------------------------ #With protection
[({'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9}, ('level1', 't1', 's1')),
 (1, ('level1', 't1', 's2', 'col1')),
 (5, ('level1', 't1', 's2', 'col2')),
 (4, ('level1', 't1', 's2', 'col3')),
 (8, ('level1', 't1', 's2', 'col4')),
 (11, ('level1', 't1', 's3', 'col1')),
 (8, ('level1', 't1', 's3', 'col2')),
 (2, ('level1', 't1', 's3', 'col3')),
 (9, ('level1', 't1', 's3', 'col4')),
 (5, ('level1', 't1', 's4', 'col1')),
 (4, ('level1', 't1', 's4', 'col2')),
 (4, ('level1', 't1', 's4', 'col3')),
 (9, ('level1', 't1', 's4', 'col4')),
 (5, ('level1', 't2', 's1', 'col1')),
 (4, ('level1', 't2', 's1', 'col2')),
 (4, ('level1', 't2', 's1', 'col3')),
 (9, ('level1', 't2', 's1', 'col4')),
 (1, ('level1', 't2', 's2', 'col1')),
 (5, ('level1', 't2', 's2', 'col2')),
 (4, ('level1', 't2', 's2', 'col3')),
 (8, ('level1', 't2', 's2', 'col4')),
 (11, ('level1', 't2', 's3', 'col1')),
 (8, ('level1', 't2', 's3', 'col2')),
 (2, ('level1', 't2', 's3', 'col3')),
 (9, ('level1', 't2', 's3', 'col4')),
 (5, ('level1', 't2', 's4', 'col1')),
 (4, ('level1', 't2', 's4', 'col2')),
 (4, ('level1', 't2', 's4', 'col3')),
 (9, ('level1', 't2', 's4', 'col4')),
 ({'s1': {'col1': 1, 'col2': 2, 'col3': 3, 'col4': 4},
   's2': {'col1': 5, 'col2': 6, 'col3': 7, 'col4': 8},
   's3': {'col1': 9, 'col2': 10, 'col3': 11, 'col4': 12},
   's4': {'col1': 13, 'col2': 14, 'col3': 15, 'col4': 16}},
  ('level1', 't3')),
 (5, ('level2', 't1', 's1', 'col1')),
 (4, ('level2', 't1', 's1', 'col2')),
 (9, ('level2', 't1', 's1', 'col3')),
 (9, ('level2', 't1', 's1', 'col4')),
 (1, ('level2', 't1', 's2', 'col1')),
 (5, ('level2', 't1', 's2', 'col2')),
 (4, ('level2', 't1', 's2', 'col3')),
 (5, ('level2', 't1', 's2', 'col4')),
 (11, ('level2', 't1', 's3', 'col1')),
 ([8, 3, 5, 23, '342342'], ('level2', 't1', 's3', 'col2')),
 (2, ('level2', 't1', 's3', 'col3')),
 (13, ('level2', 't1', 's3', 'col4')),
 (5, ('level2', 't1', 's4', 'col1')),
 (4, ('level2', 't1', 's4', 'col2')),
 (4, ('level2', 't1', 's4', 'col3')),
 (20, ('level2', 't1', 's4', 'col4')),
 (5, ('level2', 't2', 's1', 'col1')),
 (4, ('level2', 't2', 's1', 'col2')),
 (4, ('level2', 't2', 's1', 'col3')),
 (9, ('level2', 't2', 's1', 'col4')),
 (1, ('level2', 't2', 's2', 'col1')),
 (5, ('level2', 't2', 's2', 'col2')),
 (4, ('level2', 't2', 's2', 'col3')),
 (8, ('level2', 't2', 's2', 'col4')),
 (11, ('level2', 't2', 's3', 'col1')),
 (8, ('level2', 't2', 's3', 'col2')),
 (2, ('level2', 't2', 's3', 'col3')),
 (9, ('level2', 't2', 's3', 'col4')),
 (5, ('level2', 't2', 's4', 'col1')),
 (4, ('level2', 't2', 's4', 'col2')),
 (4, ('level2', 't2', 's4', 'col3')),
 (9, ('level2', 't2', 's4', 'col4')),
 (1, ('level2', 't3', 's1', 'col1')),
 (2, ('level2', 't3', 's1', 'col2', 0)),
 (3, ('level2', 't3', 's1', 'col2', 1)),
 (4, ('level2', 't3', 's1', 'col2', 2)),
 (5, ('level2', 't3', 's1', 'col2', 3)),
 ((2, 3, 4, 5, '32123'), ('level2', 't3', 's1', 'col3')),
 (4, ('level2', 't3', 's1', 'col4')),
 (5, ('level2', 't3', 's2', 'col1')),
 (6, ('level2', 't3', 's2', 'col2')),
 (7, ('level2', 't3', 's2', 'col3')),
 (8, ('level2', 't3', 's2', 'col4')),
 (9, ('level2', 't3', 's3', 'col1')),
 (10, ('level2', 't3', 's3', 'col2')),
 (11, ('level2', 't3', 's3', 'col3')),
 (12, ('level2', 't3', 's3', 'col4')),
 (13, ('level2', 't3', 's4', 'col1')),
 (14, ('level2', 't3', 's4', 'col2')),
 (15, ('level2', 't3', 's4', 'col3')),
 (16, ('level2', 't3', 's4', 'col4'))]

Install

pip install flatten-any-dict-iterable-or-whatsoever

Usage

from flatten_any_dict_iterable_or_whatsoever import flatten_nested_something_to_list_of_tuples
flatten_nested_something_to_list_of_tuples(nested_iter_that_drives_me_crazy) #That's it! :)

Examples

https://stackoverflow.com/questions/72990265/convert-nested-list-in-dictionary-to-dataframe/72990346
before:
{'a': 'test',
 'b': 1657,
 'c': 'asset',
 'd': [['2089', '0.0'], ['2088', '0.0']],
 'e': [['2088', '0.0'], ['2088', '0.0'], ['2088', '0.00']],
 'f': [['2088', '0.0', 'x', 'foo'],
       ['2088', '0.0', 'bar', 'i'],
       ['2088', '0.00', 'z', '0.2']],
 'x': ['test1', 'test2']}
Let's flatten it: flatten_nested_something_to_list_of_tuples(data)
value: test                                     keys: ('a',)
value: 1657                                     keys: ('b',)
value: asset                                    keys: ('c',)
value: 2089                                     keys: ('d', 0)
value: 0.0                                      keys: ('d', 0)
value: 2088                                     keys: ('d', 1)
value: 0.0                                      keys: ('d', 1)
value: 2088                                     keys: ('e', 0)
value: 0.0                                      keys: ('e', 0)
value: 2088                                     keys: ('e', 1)
value: 0.0                                      keys: ('e', 1)
value: 2088                                     keys: ('e', 2)
value: 0.00                                     keys: ('e', 2)
value: 2088                                     keys: ('f', 0)
value: 0.0                                      keys: ('f', 0)
value: x                                        keys: ('f', 0)
value: foo                                      keys: ('f', 0)
value: 2088                                     keys: ('f', 1)
value: 0.0                                      keys: ('f', 1)
value: bar                                      keys: ('f', 1)
value: i                                        keys: ('f', 1)
value: 2088                                     keys: ('f', 2)
value: 0.00                                     keys: ('f', 2)
value: z                                        keys: ('f', 2)
value: 0.2                                      keys: ('f', 2)
value: test1                                    keys: ('x',)
value: test2                                    keys: ('x',)
https://stackoverflow.com/questions/73430585/how-to-convert-a-list-of-nested-dictionaries-includes-tuples-as-a-dataframe
before:
[{'cb': ({'ID': 1, 'Name': 'A', 'num': 50}, {'ID': 2, 'Name': 'A', 'num': 68}),
  'final_value': 118},
 {'cb': ({'ID': 1, 'Name': 'A', 'num': 50}, {'ID': 4, 'Name': 'A', 'num': 67}),
  'final_value': 117},
 {'cb': ({'ID': 1, 'Name': 'A', 'num': 50}, {'ID': 6, 'Name': 'A', 'num': 67}),
  'final_value': 117}]
Let's flatten it: flatten_nested_something_to_list_of_tuples(data)
value: A                                        keys: (0, 'cb', 0, 'Name')
value: 1                                        keys: (0, 'cb', 0, 'ID')
value: 50                                       keys: (0, 'cb', 0, 'num')
value: A                                        keys: (0, 'cb', 1, 'Name')
value: 2                                        keys: (0, 'cb', 1, 'ID')
value: 68                                       keys: (0, 'cb', 1, 'num')
value: 118                                      keys: (0, 'final_value')
value: A                                        keys: (1, 'cb', 0, 'Name')
value: 1                                        keys: (1, 'cb', 0, 'ID')
value: 50                                       keys: (1, 'cb', 0, 'num')
value: A                                        keys: (1, 'cb', 1, 'Name')
value: 4                                        keys: (1, 'cb', 1, 'ID')
value: 67                                       keys: (1, 'cb', 1, 'num')
value: 117                                      keys: (1, 'final_value')
value: A                                        keys: (2, 'cb', 0, 'Name')
value: 1                                        keys: (2, 'cb', 0, 'ID')
value: 50                                       keys: (2, 'cb', 0, 'num')
value: A                                        keys: (2, 'cb', 1, 'Name')
value: 6                                        keys: (2, 'cb', 1, 'ID')
value: 67                                       keys: (2, 'cb', 1, 'num')
value: 117                                      keys: (2, 'final_value')
https://stackoverflow.com/questions/69943509/problems-when-flatten-a-dict
before:
[{'application_contacts': [{'adress': 'X', 'email': 'test@test.com'}],
  'application_details': {'email': None, 'phone': None},
  'employer': {'Name': 'Nom', 'email': None},
  'id': '1'},
 {'application_contacts': [{'adress': 'Z', 'email': None}],
  'application_details': {'email': 'testy@test_a.com', 'phone': None},
  'employer': {'Name': 'Nom', 'email': None},
  'id': '2'},
 {'application_contacts': [{'adress': 'Y', 'email': None}],
  'application_details': {'email': 'testy@test_a.com', 'phone': None},
  'employer': {'Name': 'Nom', 'email': None},
  'id': '3'}]
Let's flatten it: flatten_nested_something_to_list_of_tuples(data)
value: 1                                        keys: (0, 'id')
value: None                                     keys: (0, 'application_details', 'phone')
value: None                                     keys: (0, 'application_details', 'email')
value: Nom                                      keys: (0, 'employer', 'Name')
value: None                                     keys: (0, 'employer', 'email')
value: test@test.com                            keys: (0, 'application_contacts', 0, 'email')
value: X                                        keys: (0, 'application_contacts', 0, 'adress')
value: 2                                        keys: (1, 'id')
value: None                                     keys: (1, 'application_details', 'phone')
value: testy@test_a.com                         keys: (1, 'application_details', 'email')
value: Nom                                      keys: (1, 'employer', 'Name')
value: None                                     keys: (1, 'employer', 'email')
value: None                                     keys: (1, 'application_contacts', 0, 'email')
value: Z                                        keys: (1, 'application_contacts', 0, 'adress')
value: 3                                        keys: (2, 'id')
value: None                                     keys: (2, 'application_details', 'phone')
value: testy@test_a.com                         keys: (2, 'application_details', 'email')
value: Nom                                      keys: (2, 'employer', 'Name')
value: None                                     keys: (2, 'employer', 'email')
value: None                                     keys: (2, 'application_contacts', 0, 'email')
value: Y                                        keys: (2, 'application_contacts', 0, 'adress')
https://stackoverflow.com/questions/62765371/convert-nested-dataframe-to-a-simple-dataframeframe
before:
{'A': [1, 2, 3],
 'B': [4, 5, 6],
 'departure': [{'actual': None,
                'actual_runway': None,
                'airport': 'Findel',
                'delay': None,
                'estimated': '2020-07-07T06:30:00+00:00',
                'estimated_runway': None,
                'gate': None,
                'iata': 'LUX',
                'icao': 'ELLX',
                'scheduled': '2020-07-07T06:30:00+00:00',
                'terminal': None,
                'timezone': 'Europe/Luxembourg'},
               {'actual': None,
                'actual_runway': None,
                'airport': 'Findel',
                'delay': None,
                'estimated': '2020-07-07T06:30:00+00:00',
                'estimated_runway': None,
                'gate': None,
                'iata': 'LUX',
                'icao': 'ELLX',
                'scheduled': '2020-07-07T06:30:00+00:00',
                'terminal': None,
                'timezone': 'Europe/Luxembourg'},
               {'actual': None,
                'actual_runway': None,
                'airport': 'Findel',
                'delay': None,
                'estimated': '2020-07-07T06:30:00+00:00',
                'estimated_runway': None,
                'gate': None,
                'iata': 'LUX',
                'icao': 'ELLX',
                'scheduled': '2020-07-07T06:30:00+00:00',
                'terminal': None,
                'timezone': 'Europe/Luxembourg'}]}
Let's flatten it: flatten_nested_something_to_list_of_tuples(data)
value: 1                                        keys: ('A',)
value: 2                                        keys: ('A',)
value: 3                                        keys: ('A',)
value: 4                                        keys: ('B',)
value: 5                                        keys: ('B',)
value: 6                                        keys: ('B',)
value: Findel                                   keys: ('departure', 0, 'airport')
value: Europe/Luxembourg                        keys: ('departure', 0, 'timezone')
value: LUX                                      keys: ('departure', 0, 'iata')
value: ELLX                                     keys: ('departure', 0, 'icao')
value: None                                     keys: ('departure', 0, 'terminal')
value: None                                     keys: ('departure', 0, 'gate')
value: None                                     keys: ('departure', 0, 'delay')
value: 2020-07-07T06:30:00+00:00                keys: ('departure', 0, 'scheduled')
value: 2020-07-07T06:30:00+00:00                keys: ('departure', 0, 'estimated')
value: None                                     keys: ('departure', 0, 'actual')
value: None                                     keys: ('departure', 0, 'estimated_runway')
value: None                                     keys: ('departure', 0, 'actual_runway')
value: Findel                                   keys: ('departure', 1, 'airport')
value: Europe/Luxembourg                        keys: ('departure', 1, 'timezone')
value: LUX                                      keys: ('departure', 1, 'iata')
value: ELLX                                     keys: ('departure', 1, 'icao')
value: None                                     keys: ('departure', 1, 'terminal')
value: None                                     keys: ('departure', 1, 'gate')
value: None                                     keys: ('departure', 1, 'delay')
value: 2020-07-07T06:30:00+00:00                keys: ('departure', 1, 'scheduled')
value: 2020-07-07T06:30:00+00:00                keys: ('departure', 1, 'estimated')
value: None                                     keys: ('departure', 1, 'actual')
value: None                                     keys: ('departure', 1, 'estimated_runway')
value: None                                     keys: ('departure', 1, 'actual_runway')
value: Findel                                   keys: ('departure', 2, 'airport')
value: Europe/Luxembourg                        keys: ('departure', 2, 'timezone')
value: LUX                                      keys: ('departure', 2, 'iata')
value: ELLX                                     keys: ('departure', 2, 'icao')
value: None                                     keys: ('departure', 2, 'terminal')
value: None                                     keys: ('departure', 2, 'gate')
value: None                                     keys: ('departure', 2, 'delay')
value: 2020-07-07T06:30:00+00:00                keys: ('departure', 2, 'scheduled')
value: 2020-07-07T06:30:00+00:00                keys: ('departure', 2, 'estimated')
value: None                                     keys: ('departure', 2, 'actual')
value: None                                     keys: ('departure', 2, 'estimated_runway')
value: None                                     keys: ('departure', 2, 'actual_runway')
https://stackoverflow.com/questions/64359762/constructing-a-pandas-dataframe-with-columns-and-sub-columns-from-nested-diction
before:
{'level1': {'t1': {'s1': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9},
                   's2': {'col1': 1, 'col2': 5, 'col3': 4, 'col4': 8},
                   's3': {'col1': 11, 'col2': 8, 'col3': 2, 'col4': 9},
                   's4': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9}},
            't2': {'s1': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9},
                   's2': {'col1': 1, 'col2': 5, 'col3': 4, 'col4': 8},
                   's3': {'col1': 11, 'col2': 8, 'col3': 2, 'col4': 9},
                   's4': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9}},
            't3': {'s1': {'col1': 1, 'col2': 2, 'col3': 3, 'col4': 4},
                   's2': {'col1': 5, 'col2': 6, 'col3': 7, 'col4': 8},
                   's3': {'col1': 9, 'col2': 10, 'col3': 11, 'col4': 12},
                   's4': {'col1': 13, 'col2': 14, 'col3': 15, 'col4': 16}}},
 'level2': {'t1': {'s1': {'col1': 5, 'col2': 4, 'col3': 9, 'col4': 9},
                   's2': {'col1': 1, 'col2': 5, 'col3': 4, 'col4': 5},
                   's3': {'col1': 11, 'col2': 8, 'col3': 2, 'col4': 13},
                   's4': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 20}},
            't2': {'s1': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9},
                   's2': {'col1': 1, 'col2': 5, 'col3': 4, 'col4': 8},
                   's3': {'col1': 11, 'col2': 8, 'col3': 2, 'col4': 9},
                   's4': {'col1': 5, 'col2': 4, 'col3': 4, 'col4': 9}},
            't3': {'s1': {'col1': 1, 'col2': 2, 'col3': 3, 'col4': 4},
                   's2': {'col1': 5, 'col2': 6, 'col3': 7, 'col4': 8},
                   's3': {'col1': 9, 'col2': 10, 'col3': 11, 'col4': 12},
                   's4': {'col1': 13, 'col2': 14, 'col3': 15, 'col4': 16}}}}
Let's flatten it: flatten_nested_something_to_list_of_tuples(data)
value: 5                                        keys: ('level1', 't1', 's1', 'col1')
value: 4                                        keys: ('level1', 't1', 's1', 'col2')
value: 4                                        keys: ('level1', 't1', 's1', 'col3')
value: 9                                        keys: ('level1', 't1', 's1', 'col4')
value: 1                                        keys: ('level1', 't1', 's2', 'col1')
value: 5                                        keys: ('level1', 't1', 's2', 'col2')
value: 4                                        keys: ('level1', 't1', 's2', 'col3')
value: 8                                        keys: ('level1', 't1', 's2', 'col4')
value: 11                                       keys: ('level1', 't1', 's3', 'col1')
value: 8                                        keys: ('level1', 't1', 's3', 'col2')
value: 2                                        keys: ('level1', 't1', 's3', 'col3')
value: 9                                        keys: ('level1', 't1', 's3', 'col4')
value: 5                                        keys: ('level1', 't1', 's4', 'col1')
value: 4                                        keys: ('level1', 't1', 's4', 'col2')
value: 4                                        keys: ('level1', 't1', 's4', 'col3')
value: 9                                        keys: ('level1', 't1', 's4', 'col4')
value: 5                                        keys: ('level1', 't2', 's1', 'col1')
value: 4                                        keys: ('level1', 't2', 's1', 'col2')
value: 4                                        keys: ('level1', 't2', 's1', 'col3')
value: 9                                        keys: ('level1', 't2', 's1', 'col4')
value: 1                                        keys: ('level1', 't2', 's2', 'col1')
value: 5                                        keys: ('level1', 't2', 's2', 'col2')
value: 4                                        keys: ('level1', 't2', 's2', 'col3')
value: 8                                        keys: ('level1', 't2', 's2', 'col4')
value: 11                                       keys: ('level1', 't2', 's3', 'col1')
value: 8                                        keys: ('level1', 't2', 's3', 'col2')
value: 2                                        keys: ('level1', 't2', 's3', 'col3')
value: 9                                        keys: ('level1', 't2', 's3', 'col4')
value: 5                                        keys: ('level1', 't2', 's4', 'col1')
value: 4                                        keys: ('level1', 't2', 's4', 'col2')
value: 4                                        keys: ('level1', 't2', 's4', 'col3')
value: 9                                        keys: ('level1', 't2', 's4', 'col4')
value: 1                                        keys: ('level1', 't3', 's1', 'col1')
value: 2                                        keys: ('level1', 't3', 's1', 'col2')
value: 3                                        keys: ('level1', 't3', 's1', 'col3')
value: 4                                        keys: ('level1', 't3', 's1', 'col4')
value: 5                                        keys: ('level1', 't3', 's2', 'col1')
value: 6                                        keys: ('level1', 't3', 's2', 'col2')
value: 7                                        keys: ('level1', 't3', 's2', 'col3')
value: 8                                        keys: ('level1', 't3', 's2', 'col4')
value: 9                                        keys: ('level1', 't3', 's3', 'col1')
value: 10                                       keys: ('level1', 't3', 's3', 'col2')
value: 11                                       keys: ('level1', 't3', 's3', 'col3')
value: 12                                       keys: ('level1', 't3', 's3', 'col4')
value: 13                                       keys: ('level1', 't3', 's4', 'col1')
value: 14                                       keys: ('level1', 't3', 's4', 'col2')
value: 15                                       keys: ('level1', 't3', 's4', 'col3')
value: 16                                       keys: ('level1', 't3', 's4', 'col4')
value: 5                                        keys: ('level2', 't1', 's1', 'col1')
value: 4                                        keys: ('level2', 't1', 's1', 'col2')
value: 9                                        keys: ('level2', 't1', 's1', 'col3')
value: 9                                        keys: ('level2', 't1', 's1', 'col4')
value: 1                                        keys: ('level2', 't1', 's2', 'col1')
value: 5                                        keys: ('level2', 't1', 's2', 'col2')
value: 4                                        keys: ('level2', 't1', 's2', 'col3')
value: 5                                        keys: ('level2', 't1', 's2', 'col4')
value: 11                                       keys: ('level2', 't1', 's3', 'col1')
value: 8                                        keys: ('level2', 't1', 's3', 'col2')
value: 2                                        keys: ('level2', 't1', 's3', 'col3')
value: 13                                       keys: ('level2', 't1', 's3', 'col4')
value: 5                                        keys: ('level2', 't1', 's4', 'col1')
value: 4                                        keys: ('level2', 't1', 's4', 'col2')
value: 4                                        keys: ('level2', 't1', 's4', 'col3')
value: 20                                       keys: ('level2', 't1', 's4', 'col4')
value: 5                                        keys: ('level2', 't2', 's1', 'col1')
value: 4                                        keys: ('level2', 't2', 's1', 'col2')
value: 4                                        keys: ('level2', 't2', 's1', 'col3')
value: 9                                        keys: ('level2', 't2', 's1', 'col4')
value: 1                                        keys: ('level2', 't2', 's2', 'col1')
value: 5                                        keys: ('level2', 't2', 's2', 'col2')
value: 4                                        keys: ('level2', 't2', 's2', 'col3')
value: 8                                        keys: ('level2', 't2', 's2', 'col4')
value: 11                                       keys: ('level2', 't2', 's3', 'col1')
value: 8                                        keys: ('level2', 't2', 's3', 'col2')
value: 2                                        keys: ('level2', 't2', 's3', 'col3')
value: 9                                        keys: ('level2', 't2', 's3', 'col4')
value: 5                                        keys: ('level2', 't2', 's4', 'col1')
value: 4                                        keys: ('level2', 't2', 's4', 'col2')
value: 4                                        keys: ('level2', 't2', 's4', 'col3')
value: 9                                        keys: ('level2', 't2', 's4', 'col4')
value: 1                                        keys: ('level2', 't3', 's1', 'col1')
value: 2                                        keys: ('level2', 't3', 's1', 'col2')
value: 3                                        keys: ('level2', 't3', 's1', 'col3')
value: 4                                        keys: ('level2', 't3', 's1', 'col4')
value: 5                                        keys: ('level2', 't3', 's2', 'col1')
value: 6                                        keys: ('level2', 't3', 's2', 'col2')
value: 7                                        keys: ('level2', 't3', 's2', 'col3')
value: 8                                        keys: ('level2', 't3', 's2', 'col4')
value: 9                                        keys: ('level2', 't3', 's3', 'col1')
value: 10                                       keys: ('level2', 't3', 's3', 'col2')
value: 11                                       keys: ('level2', 't3', 's3', 'col3')
value: 12                                       keys: ('level2', 't3', 's3', 'col4')
value: 13                                       keys: ('level2', 't3', 's4', 'col1')
value: 14                                       keys: ('level2', 't3', 's4', 'col2')
value: 15                                       keys: ('level2', 't3', 's4', 'col3')
value: 16                                       keys: ('level2', 't3', 's4', 'col4')
https://stackoverflow.com/questions/61984148/how-to-handle-nested-lists-and-dictionaries-in-pandas-dataframe
before:
{'critic_reviews': [{'review_critic': 'XYZ', 'review_score': 90},
                    {'review_critic': 'ABC', 'review_score': 90},
                    {'review_critic': '123', 'review_score': 90}],
 'genres': ['Sports', 'Golf'],
 'score': 85,
 'title': 'Golf Simulator',
 'url': 'http://example.com/golf-simulator'}
Let's flatten it: flatten_nested_something_to_list_of_tuples(data)
value: Golf Simulator                           keys: ('title',)
value: Sports                                   keys: ('genres',)
value: Golf                                     keys: ('genres',)
value: 85                                       keys: ('score',)
value: XYZ                                      keys: ('critic_reviews', 0, 'review_critic')
value: 90                                       keys: ('critic_reviews', 0, 'review_score')
value: ABC                                      keys: ('critic_reviews', 1, 'review_critic')
value: 90                                       keys: ('critic_reviews', 1, 'review_score')
value: 123                                      keys: ('critic_reviews', 2, 'review_critic')
value: 90                                       keys: ('critic_reviews', 2, 'review_score')
value: http://example.com/golf-simulator        keys: ('url',)
https://stackoverflow.com/questions/72146094/problems-matching-values-from-nested-dictionary
before:
{'_links': {'next': None, 'prev': None},
 'limit': 250,
 'offset': 0,
 'runs': [{'assignedto_id': None,
           'blocked_count': 0,
           'completed_on': None,
           'config': None,
           'config_ids': [],
           'created_by': 1,
           'created_on': 1651790693,
           'custom_status1_count': 0,
           'custom_status2_count': 0,
           'custom_status3_count': 0,
           'custom_status4_count': 0,
           'custom_status5_count': 0,
           'custom_status6_count': 0,
           'custom_status7_count': 0,
           'description': None,
           'failed_count': 1,
           'id': 13,
           'include_all': False,
           'is_completed': False,
           'milestone_id': None,
           'name': '2022-05-05-testrun',
           'passed_count': 2,
           'plan_id': None,
           'project_id': 1,
           'refs': None,
           'retest_count': 0,
           'suite_id': 1,
           'untested_count': 0,
           'updated_on': 1651790693,
           'url': 'https://xxxxxxxxxx.testrail.io/index.php?/runs/view/13'},
          {'assignedto_id': None,
           'blocked_count': 0,
           'completed_on': 1650989972,
           'config': None,
           'config_ids': [],
           'created_by': 5,
           'created_on': 1650966329,
           'custom_status1_count': 0,
           'custom_status2_count': 0,
           'custom_status3_count': 0,
           'custom_status4_count': 0,
           'custom_status5_count': 0,
           'custom_status6_count': 0,
           'custom_status7_count': 0,
           'description': None,
           'failed_count': 0,
           'id': 9,
           'include_all': False,
           'is_completed': True,
           'milestone_id': None,
           'name': 'This is a new test run',
           'passed_count': 0,
           'plan_id': None,
           'project_id': 1,
           'refs': None,
           'retest_count': 0,
           'suite_id': 1,
           'untested_count': 3,
           'updated_on': 1650966329,
           'url': 'https://xxxxxxxxxx.testrail.io/index.php?/runs/view/9'}],
 'size': 2}
Let's flatten it: flatten_nested_something_to_list_of_tuples(data)
value: None                                     keys: ('_links', 'next')
value: None                                     keys: ('_links', 'prev')
value: 250                                      keys: ('limit',)
value: 0                                        keys: ('offset',)
value: None                                     keys: ('runs', 0, 'assignedto_id')
value: 0                                        keys: ('runs', 0, 'blocked_count')
value: None                                     keys: ('runs', 0, 'completed_on')
value: None                                     keys: ('runs', 0, 'config')
value: 1                                        keys: ('runs', 0, 'created_by')
value: 1651790693                               keys: ('runs', 0, 'created_on')
value: 0                                        keys: ('runs', 0, 'custom_status1_count')
value: 0                                        keys: ('runs', 0, 'custom_status2_count')
value: 0                                        keys: ('runs', 0, 'custom_status3_count')
value: 0                                        keys: ('runs', 0, 'custom_status4_count')
value: 0                                        keys: ('runs', 0, 'custom_status5_count')
value: 0                                        keys: ('runs', 0, 'custom_status6_count')
value: 0                                        keys: ('runs', 0, 'custom_status7_count')
value: None                                     keys: ('runs', 0, 'description')
value: 1                                        keys: ('runs', 0, 'failed_count')
value: 13                                       keys: ('runs', 0, 'id')
value: False                                    keys: ('runs', 0, 'include_all')
value: False                                    keys: ('runs', 0, 'is_completed')
value: None                                     keys: ('runs', 0, 'milestone_id')
value: 2022-05-05-testrun                       keys: ('runs', 0, 'name')
value: 2                                        keys: ('runs', 0, 'passed_count')
value: None                                     keys: ('runs', 0, 'plan_id')
value: 1                                        keys: ('runs', 0, 'project_id')
value: None                                     keys: ('runs', 0, 'refs')
value: 0                                        keys: ('runs', 0, 'retest_count')
value: 1                                        keys: ('runs', 0, 'suite_id')
value: 0                                        keys: ('runs', 0, 'untested_count')
value: 1651790693                               keys: ('runs', 0, 'updated_on')
value: https://xxxxxxxxxx.testrail.io/index.php?/runs/view/13 keys: ('runs', 0, 'url')
value: None                                     keys: ('runs', 1, 'assignedto_id')
value: 0                                        keys: ('runs', 1, 'blocked_count')
value: 1650989972                               keys: ('runs', 1, 'completed_on')
value: None                                     keys: ('runs', 1, 'config')
value: 5                                        keys: ('runs', 1, 'created_by')
value: 1650966329                               keys: ('runs', 1, 'created_on')
value: 0                                        keys: ('runs', 1, 'custom_status1_count')
value: 0                                        keys: ('runs', 1, 'custom_status2_count')
value: 0                                        keys: ('runs', 1, 'custom_status3_count')
value: 0                                        keys: ('runs', 1, 'custom_status4_count')
value: 0                                        keys: ('runs', 1, 'custom_status5_count')
value: 0                                        keys: ('runs', 1, 'custom_status6_count')
value: 0                                        keys: ('runs', 1, 'custom_status7_count')
value: None                                     keys: ('runs', 1, 'description')
value: 0                                        keys: ('runs', 1, 'failed_count')
value: 9                                        keys: ('runs', 1, 'id')
value: False                                    keys: ('runs', 1, 'include_all')
value: True                                     keys: ('runs', 1, 'is_completed')
value: None                                     keys: ('runs', 1, 'milestone_id')
value: This is a new test run                   keys: ('runs', 1, 'name')
value: 0                                        keys: ('runs', 1, 'passed_count')
value: None                                     keys: ('runs', 1, 'plan_id')
value: 1                                        keys: ('runs', 1, 'project_id')
value: None                                     keys: ('runs', 1, 'refs')
value: 0                                        keys: ('runs', 1, 'retest_count')
value: 1                                        keys: ('runs', 1, 'suite_id')
value: 3                                        keys: ('runs', 1, 'untested_count')
value: 1650966329                               keys: ('runs', 1, 'updated_on')
value: https://xxxxxxxxxx.testrail.io/index.php?/runs/view/9 keys: ('runs', 1, 'url')
value: 2                                        keys: ('size',)
https://stackoverflow.com/questions/73708706/how-to-get-values-from-list-of-nested-dictionaries/73839430#73839430
before:
{'results': [{'end_time': '2021-01-21',
              'key': 'q1',
              'result_type': 'multipleChoice',
              'start_time': '2021-01-21',
              'value': ['1']},
             {'end_time': '2021-01-21',
              'key': 'q2',
              'result_type': 'multipleChoice',
              'start_time': '2021-01-21',
              'value': ['False']},
             {'end_time': '2021-01-21',
              'key': 'q3',
              'result_type': 'multipleChoice',
              'start_time': '2021-01-21',
              'value': ['3']},
             {'end_time': '2021-01-21',
              'key': 'q4',
              'result_type': 'multipleChoice',
              'start_time': '2021-01-21',
              'value': ['3']}]}
Let's flatten it: flatten_nested_something_to_list_of_tuples(data)
value: q1                                       keys: ('results', 0, 'key')
value: 1                                        keys: ('results', 0, 'value')
value: 2021-01-21                               keys: ('results', 0, 'end_time')
value: 2021-01-21                               keys: ('results', 0, 'start_time')
value: multipleChoice                           keys: ('results', 0, 'result_type')
value: q2                                       keys: ('results', 1, 'key')
value: False                                    keys: ('results', 1, 'value')
value: 2021-01-21                               keys: ('results', 1, 'end_time')
value: 2021-01-21                               keys: ('results', 1, 'start_time')
value: multipleChoice                           keys: ('results', 1, 'result_type')
value: q3                                       keys: ('results', 2, 'key')
value: 3                                        keys: ('results', 2, 'value')
value: 2021-01-21                               keys: ('results', 2, 'end_time')
value: 2021-01-21                               keys: ('results', 2, 'start_time')
value: multipleChoice                           keys: ('results', 2, 'result_type')
value: q4                                       keys: ('results', 3, 'key')
value: 3                                        keys: ('results', 3, 'value')
value: 2021-01-21                               keys: ('results', 3, 'end_time')
value: 2021-01-21                               keys: ('results', 3, 'start_time')
value: multipleChoice                           keys: ('results', 3, 'result_type')
https://stackoverflow.com/questions/70811820/pandas-multiindex-from-nested-dictionary
before:
{'A': [1, 2],
 'B': [2, 3],
 'Coords': [{'X': [1, 2, 3], 'Y': [1, 2, 3], 'Z': [1, 2, 3]},
            {'X': [2, 3], 'Y': [2, 3], 'Z': [2, 3]}]}
Let's flatten it: flatten_nested_something_to_list_of_tuples(data)
value: 1                                        keys: ('A',)
value: 2                                        keys: ('A',)
value: 2                                        keys: ('B',)
value: 3                                        keys: ('B',)
value: 1                                        keys: ('Coords', 0, 'X')
value: 2                                        keys: ('Coords', 0, 'X')
value: 3                                        keys: ('Coords', 0, 'X')
value: 1                                        keys: ('Coords', 0, 'Y')
value: 2                                        keys: ('Coords', 0, 'Y')
value: 3                                        keys: ('Coords', 0, 'Y')
value: 1                                        keys: ('Coords', 0, 'Z')
value: 2                                        keys: ('Coords', 0, 'Z')
value: 3                                        keys: ('Coords', 0, 'Z')
value: 2                                        keys: ('Coords', 1, 'X')
value: 3                                        keys: ('Coords', 1, 'X')
value: 2                                        keys: ('Coords', 1, 'Y')
value: 3                                        keys: ('Coords', 1, 'Y')
value: 2                                        keys: ('Coords', 1, 'Z')
value: 3                                        keys: ('Coords', 1, 'Z')
https://stackoverflow.com/questions/72017771/key-error-when-accessing-a-nested-dictionary
before:
[{'blocks': [{'block_id': 'BJNTn',
              'text': {'text': 'You have a new message.',
                       'type': 'mrkdwn',
                       'verbatim': False},
              'type': 'section'},
             {'block_id': 'WPn/l',
              'text': {'text': '*Heard By*\nFriend',
                       'type': 'mrkdwn',
                       'verbatim': False},
              'type': 'section'},
             {'block_id': '5yp',
              'text': {'text': '*Which Direction? *\nNorth',
                       'type': 'mrkdwn',
                       'verbatim': False},
              'type': 'section'},
             {'block_id': 'fKEpF',
              'text': {'text': '*Which Destination*\nNew York',
                       'type': 'mrkdwn',
                       'verbatim': False},
              'type': 'section'},
             {'block_id': 'qjAH',
              'text': {'text': '*New Customer:*\\Yes',
                       'type': 'mrkdwn',
                       'verbatim': False},
              'type': 'section'},
             {'block_id': 'yt4',
              'elements': [{'action_id': '+bc',
                            'text': {'bar': 'View results',
                                     'emoji': True,
                                     'type': 'plain_text'},
                            'type': 'button',
                            'url': 'www.example.com/results'}],
              'type': 'actions'},
             {'block_id': 'IBr',
              'text': {'text': ' ', 'type': 'mrkdwn', 'verbatim': False},
              'type': 'section'}],
  'bot_id': 'BPD4K3SJW',
  'subtype': 'bot_message',
  'text': "This content can't be displayed.",
  'timestamp': '1650905606.755969',
  'type': 'message',
  'username': 'admin'},
 {'blocks': [{'block_id': 'Smd',
              'text': {'text': 'You have a new message.',
                       'type': 'mrkdwn',
                       'verbatim': False},
              'type': 'section'},
             {'block_id': '6YaLt',
              'text': {'text': '*Heard By*\nOnline Search',
                       'type': 'mrkdwn',
                       'verbatim': False},
              'type': 'section'},
             {'block_id': 'w3o',
              'text': {'text': '*Which Direction: *\nNorth',
                       'type': 'mrkdwn',
                       'verbatim': False},
              'type': 'section'},
             {'block_id': 'PTQ',
              'text': {'text': '*Which Destination? *\nMiami',
                       'type': 'mrkdwn',
                       'verbatim': False},
              'type': 'section'},
             {'block_id': 'JCfSP',
              'text': {'text': '*New Customer? *\nNo',
                       'type': 'mrkdwn',
                       'verbatim': False},
              'type': 'section'},
             {'block_id': 'yt4',
              'elements': [{'action_id': '+bc',
                            'text': {'bar': 'View results',
                                     'emoji': True,
                                     'type': 'plain_text'},
                            'type': 'button',
                            'url': 'www.example.com/results'}],
              'type': 'actions'},
             {'block_id': 'RJOA',
              'text': {'text': ' ', 'type': 'mrkdwn', 'verbatim': False},
              'type': 'section'}],
  'bot_id': 'BPD4K3SJW',
  'subtype': 'bot_message',
  'text': "This content can't be displayed.",
  'timestamp': '1650899428.077709',
  'type': 'message',
  'username': 'admin'}]
Let's flatten it: flatten_nested_something_to_list_of_tuples(data)
value: message                                  keys: (0, 'type')
value: bot_message                              keys: (0, 'subtype')
value: This content can't be displayed.         keys: (0, 'text')
value: 1650905606.755969                        keys: (0, 'timestamp')
value: admin                                    keys: (0, 'username')
value: BPD4K3SJW                                keys: (0, 'bot_id')
value: section                                  keys: (0, 'blocks', 0, 'type')
value: BJNTn                                    keys: (0, 'blocks', 0, 'block_id')
value: mrkdwn                                   keys: (0, 'blocks', 0, 'text', 'type')
value: You have a new message.                  keys: (0, 'blocks', 0, 'text', 'text')
value: False                                    keys: (0, 'blocks', 0, 'text', 'verbatim')
value: section                                  keys: (0, 'blocks', 1, 'type')
value: WPn/l                                    keys: (0, 'blocks', 1, 'block_id')
value: mrkdwn                                   keys: (0, 'blocks', 1, 'text', 'type')
value: *Heard By*
Friend                        keys: (0, 'blocks', 1, 'text', 'text')
value: False                                    keys: (0, 'blocks', 1, 'text', 'verbatim')
value: section                                  keys: (0, 'blocks', 2, 'type')
value: 5yp                                      keys: (0, 'blocks', 2, 'block_id')
value: mrkdwn                                   keys: (0, 'blocks', 2, 'text', 'type')
value: *Which Direction? *
North                keys: (0, 'blocks', 2, 'text', 'text')
value: False                                    keys: (0, 'blocks', 2, 'text', 'verbatim')
value: section                                  keys: (0, 'blocks', 3, 'type')
value: fKEpF                                    keys: (0, 'blocks', 3, 'block_id')
value: mrkdwn                                   keys: (0, 'blocks', 3, 'text', 'type')
value: *Which Destination*
New York             keys: (0, 'blocks', 3, 'text', 'text')
value: False                                    keys: (0, 'blocks', 3, 'text', 'verbatim')
value: section                                  keys: (0, 'blocks', 4, 'type')
value: qjAH                                     keys: (0, 'blocks', 4, 'block_id')
value: mrkdwn                                   keys: (0, 'blocks', 4, 'text', 'type')
value: *New Customer:*\Yes                      keys: (0, 'blocks', 4, 'text', 'text')
value: False                                    keys: (0, 'blocks', 4, 'text', 'verbatim')
value: actions                                  keys: (0, 'blocks', 5, 'type')
value: yt4                                      keys: (0, 'blocks', 5, 'block_id')
value: button                                   keys: (0, 'blocks', 5, 'elements', 0, 'type')
value: +bc                                      keys: (0, 'blocks', 5, 'elements', 0, 'action_id')
value: plain_text                               keys: (0, 'blocks', 5, 'elements', 0, 'text', 'type')
value: View results                             keys: (0, 'blocks', 5, 'elements', 0, 'text', 'bar')
value: True                                     keys: (0, 'blocks', 5, 'elements', 0, 'text', 'emoji')
value: www.example.com/results                  keys: (0, 'blocks', 5, 'elements', 0, 'url')
value: section                                  keys: (0, 'blocks', 6, 'type')
value: IBr                                      keys: (0, 'blocks', 6, 'block_id')
value: mrkdwn                                   keys: (0, 'blocks', 6, 'text', 'type')
value:                                          keys: (0, 'blocks', 6, 'text', 'text')
value: False                                    keys: (0, 'blocks', 6, 'text', 'verbatim')
value: message                                  keys: (1, 'type')
value: bot_message                              keys: (1, 'subtype')
value: This content can't be displayed.         keys: (1, 'text')
value: 1650899428.077709                        keys: (1, 'timestamp')
value: admin                                    keys: (1, 'username')
value: BPD4K3SJW                                keys: (1, 'bot_id')
value: section                                  keys: (1, 'blocks', 0, 'type')
value: Smd                                      keys: (1, 'blocks', 0, 'block_id')
value: mrkdwn                                   keys: (1, 'blocks', 0, 'text', 'type')
value: You have a new message.                  keys: (1, 'blocks', 0, 'text', 'text')
value: False                                    keys: (1, 'blocks', 0, 'text', 'verbatim')
value: section                                  keys: (1, 'blocks', 1, 'type')
value: 6YaLt                                    keys: (1, 'blocks', 1, 'block_id')
value: mrkdwn                                   keys: (1, 'blocks', 1, 'text', 'type')
value: *Heard By*
Online Search                 keys: (1, 'blocks', 1, 'text', 'text')
value: False                                    keys: (1, 'blocks', 1, 'text', 'verbatim')
value: section                                  keys: (1, 'blocks', 2, 'type')
value: w3o                                      keys: (1, 'blocks', 2, 'block_id')
value: mrkdwn                                   keys: (1, 'blocks', 2, 'text', 'type')
value: *Which Direction: *
North                keys: (1, 'blocks', 2, 'text', 'text')
value: False                                    keys: (1, 'blocks', 2, 'text', 'verbatim')
value: section                                  keys: (1, 'blocks', 3, 'type')
value: PTQ                                      keys: (1, 'blocks', 3, 'block_id')
value: mrkdwn                                   keys: (1, 'blocks', 3, 'text', 'type')
value: *Which Destination? *
Miami              keys: (1, 'blocks', 3, 'text', 'text')
value: False                                    keys: (1, 'blocks', 3, 'text', 'verbatim')
value: section                                  keys: (1, 'blocks', 4, 'type')
value: JCfSP                                    keys: (1, 'blocks', 4, 'block_id')
value: mrkdwn                                   keys: (1, 'blocks', 4, 'text', 'type')
value: *New Customer? *
No                      keys: (1, 'blocks', 4, 'text', 'text')
value: False                                    keys: (1, 'blocks', 4, 'text', 'verbatim')
value: actions                                  keys: (1, 'blocks', 5, 'type')
value: yt4                                      keys: (1, 'blocks', 5, 'block_id')
value: button                                   keys: (1, 'blocks', 5, 'elements', 0, 'type')
value: +bc                                      keys: (1, 'blocks', 5, 'elements', 0, 'action_id')
value: plain_text                               keys: (1, 'blocks', 5, 'elements', 0, 'text', 'type')
value: View results                             keys: (1, 'blocks', 5, 'elements', 0, 'text', 'bar')
value: True                                     keys: (1, 'blocks', 5, 'elements', 0, 'text', 'emoji')
value: www.example.com/results                  keys: (1, 'blocks', 5, 'elements', 0, 'url')
value: section                                  keys: (1, 'blocks', 6, 'type')
value: RJOA                                     keys: (1, 'blocks', 6, 'block_id')
value: mrkdwn                                   keys: (1, 'blocks', 6, 'text', 'type')
value:                                          keys: (1, 'blocks', 6, 'text', 'text')
value: False                                    keys: (1, 'blocks', 6, 'text', 'verbatim')
https://stackoverflow.com/questions/73643077/how-to-transform-a-list-of-nested-dictionaries-into-a-data-frame-pd-json-normal
before:
[{'apple': {'price': 4, 'units': 3}},
 {'banana': {'price': 2, 'units': 20}},
 {'orange': {'price': 5, 'units': 15}}]
Let's flatten it: flatten_nested_something_to_list_of_tuples(data)
value: 3                                        keys: (0, 'apple', 'units')
value: 4                                        keys: (0, 'apple', 'price')
value: 20                                       keys: (1, 'banana', 'units')
value: 2                                        keys: (1, 'banana', 'price')
value: 15                                       keys: (2, 'orange', 'units')
value: 5                                        keys: (2, 'orange', 'price')
https://stackoverflow.com/questions/58110440/opening-nested-dict-in-a-single-column-to-multiple-columns-in-pandas
before:
{'simple25b': {'hands': {'0': {'currency': 'rm',
                               'handId': 'xyz',
                               'time': '2019-09-23 11:00:01'},
                         '1': {'currency': 'rm',
                               'handId': 'abc',
                               'time': '2019-09-23 11:01:18'}}},
 'simple5af': {'hands': {'0': {'currency': 'rm',
                               'handId': 'akg',
                               'time': '2019-09-23 10:53:22'},
                         '1': {'currency': 'rm',
                               'handId': 'mzc',
                               'time': '2019-09-23 10:54:15'},
                         '2': {'currency': 'rm',
                               'handId': 'swk',
                               'time': '2019-09-23 10:56:03'},
                         '3': {'currency': 'rm',
                               'handId': 'pQc',
                               'time': '2019-09-23 10:57:15'},
                         '4': {'currency': 'rm',
                               'handId': 'ywh',
                               'time': '2019-09-23 10:58:53'}}}}
Let's flatten it: flatten_nested_something_to_list_of_tuples(data)
value: xyz                                      keys: ('simple25b', 'hands', '0', 'handId')
value: 2019-09-23 11:00:01                      keys: ('simple25b', 'hands', '0', 'time')
value: rm                                       keys: ('simple25b', 'hands', '0', 'currency')
value: abc                                      keys: ('simple25b', 'hands', '1', 'handId')
value: 2019-09-23 11:01:18                      keys: ('simple25b', 'hands', '1', 'time')
value: rm                                       keys: ('simple25b', 'hands', '1', 'currency')
value: akg                                      keys: ('simple5af', 'hands', '0', 'handId')
value: 2019-09-23 10:53:22                      keys: ('simple5af', 'hands', '0', 'time')
value: rm                                       keys: ('simple5af', 'hands', '0', 'currency')
value: mzc                                      keys: ('simple5af', 'hands', '1', 'handId')
value: 2019-09-23 10:54:15                      keys: ('simple5af', 'hands', '1', 'time')
value: rm                                       keys: ('simple5af', 'hands', '1', 'currency')
value: swk                                      keys: ('simple5af', 'hands', '2', 'handId')
value: 2019-09-23 10:56:03                      keys: ('simple5af', 'hands', '2', 'time')
value: rm                                       keys: ('simple5af', 'hands', '2', 'currency')
value: pQc                                      keys: ('simple5af', 'hands', '3', 'handId')
value: 2019-09-23 10:57:15                      keys: ('simple5af', 'hands', '3', 'time')
value: rm                                       keys: ('simple5af', 'hands', '3', 'currency')
value: ywh                                      keys: ('simple5af', 'hands', '4', 'handId')
value: 2019-09-23 10:58:53                      keys: ('simple5af', 'hands', '4', 'time')
value: rm                                       keys: ('simple5af', 'hands', '4', 'currency')
https://stackoverflow.com/questions/62059970/how-can-i-convert-nested-dictionary-to-pd-dataframe-faster
before:
{'file': 'name',
 'main': [{'answer': [{'comment': 'It is defined as',
                       'user': 'John',
                       'value': [{'my_value': 5, 'value_2': 10},
                                 {'my_value': 24, 'value_2': 30}]},
                      {'comment': 'as John said above it simply means',
                       'user': 'Sam',
                       'value': [{'my_value': 9, 'value_2': 10},
                                 {'my_value': 54, 'value_2': 19}]}],
           'closed': 'no',
           'question': 'what is ?',
           'question_no': 'Q.1'}]}
Let's flatten it: flatten_nested_something_to_list_of_tuples(data)
value: name                                     keys: ('file',)
value: Q.1                                      keys: ('main', 0, 'question_no')
value: what is ?                                keys: ('main', 0, 'question')
value: John                                     keys: ('main', 0, 'answer', 0, 'user')
value: It is defined as                         keys: ('main', 0, 'answer', 0, 'comment')
value: 5                                        keys: ('main', 0, 'answer', 0, 'value', 0, 'my_value')
value: 10                                       keys: ('main', 0, 'answer', 0, 'value', 0, 'value_2')
value: 24                                       keys: ('main', 0, 'answer', 0, 'value', 1, 'my_value')
value: 30                                       keys: ('main', 0, 'answer', 0, 'value', 1, 'value_2')
value: Sam                                      keys: ('main', 0, 'answer', 1, 'user')
value: as John said above it simply means       keys: ('main', 0, 'answer', 1, 'comment')
value: 9                                        keys: ('main', 0, 'answer', 1, 'value', 0, 'my_value')
value: 10                                       keys: ('main', 0, 'answer', 1, 'value', 0, 'value_2')
value: 54                                       keys: ('main', 0, 'answer', 1, 'value', 1, 'my_value')
value: 19                                       keys: ('main', 0, 'answer', 1, 'value', 1, 'value_2')
value: no                                       keys: ('main', 0, 'closed')
https://stackoverflow.com/questions/39634369/4-dimensional-nested-dictionary-to-pandas-data-frame
before:
{'orders': [{'created_at': '2016-09-20T22:04:49+02:00',
             'email': 'test@aol.com',
             'id': 4314127108,
             'line_items': [{'destination_location': {'address1': 'Teststreet '
                                                                  '12',
                                                      'address2': '',
                                                      'city': 'Berlin',
                                                      'country_code': 'DE',
                                                      'id': 2383331012,
                                                      'name': 'Test Test',
                                                      'zip': '10117'},
                             'gift_card': False,
                             'name': 'Blueberry Cup'},
                            {'destination_location': {'address1': 'Teststreet '
                                                                  '12',
                                                      'address2': '',
                                                      'city': 'Berlin',
                                                      'country_code': 'DE',
                                                      'id': 2383331012,
                                                      'name': 'Test Test',
                                                      'zip': '10117'},
                             'gift_card': False,
                             'name': 'Strawberry Cup'}]}]}
Let's flatten it: flatten_nested_something_to_list_of_tuples(data)
value: 2016-09-20T22:04:49+02:00                keys: ('orders', 0, 'created_at')
value: test@aol.com                             keys: ('orders', 0, 'email')
value: 4314127108                               keys: ('orders', 0, 'id')
value: Teststreet 12                            keys: ('orders', 0, 'line_items', 0, 'destination_location', 'address1')
value:                                          keys: ('orders', 0, 'line_items', 0, 'destination_location', 'address2')
value: Berlin                                   keys: ('orders', 0, 'line_items', 0, 'destination_location', 'city')
value: DE                                       keys: ('orders', 0, 'line_items', 0, 'destination_location', 'country_code')
value: 2383331012                               keys: ('orders', 0, 'line_items', 0, 'destination_location', 'id')
value: Test Test                                keys: ('orders', 0, 'line_items', 0, 'destination_location', 'name')
value: 10117                                    keys: ('orders', 0, 'line_items', 0, 'destination_location', 'zip')
value: False                                    keys: ('orders', 0, 'line_items', 0, 'gift_card')
value: Blueberry Cup                            keys: ('orders', 0, 'line_items', 0, 'name')
value: Teststreet 12                            keys: ('orders', 0, 'line_items', 1, 'destination_location', 'address1')
value:                                          keys: ('orders', 0, 'line_items', 1, 'destination_location', 'address2')
value: Berlin                                   keys: ('orders', 0, 'line_items', 1, 'destination_location', 'city')
value: DE                                       keys: ('orders', 0, 'line_items', 1, 'destination_location', 'country_code')
value: 2383331012                               keys: ('orders', 0, 'line_items', 1, 'destination_location', 'id')
value: Test Test                                keys: ('orders', 0, 'line_items', 1, 'destination_location', 'name')
value: 10117                                    keys: ('orders', 0, 'line_items', 1, 'destination_location', 'zip')
value: False                                    keys: ('orders', 0, 'line_items', 1, 'gift_card')
value: Strawberry Cup                           keys: ('orders', 0, 'line_items', 1, 'name')
#The code that I used
from pprint import pprint
def print__(data_, stacklink,original_):
    print(stacklink)
    print(f'before:')
    pprint(original_)
    print('\nLet\'s flatten it: flatten_nested_something_to_list_of_tuples(data)\n')
    for value, keys in data_:
        print(f'value: {str(value).ljust(40)} keys: {keys}')
    print('\n\n\n')

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Built Distribution

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page