Pergunta de entrevista da empresa Amazon
In python code, given a json object with nested objects, write a function that flattens all the objects to a single key value dictionary. Do not use the lib that actually performs this function.
{ a:{b:c,d:e} } becomes {a_b:c, a_d:e} ( not, a:"b:c,d:e" }
Respostas da entrevista
def separate(x):
y={}
for key,value in x.items():
for key1,value1 in value.items():
y[key+'_'+key1]=value1
return y
x = {'a':{'b':'c','d':{'e':{'f':'g'}}} }
def get_key_val(arg_dict):
return_dict = {}
for arg_key, arg_val in arg_dict.items():
if isinstance(arg_val, dict):
for in_key, in_val in arg_val.items():
for return_key, return_val in get_key_val({arg_key+'_'+in_key: in_val}).items():
return_dict[return_key] = return_val
else:
return_dict[arg_key] = arg_val
return return_dict
get_key_val(x)
def flatten_json(j):
global flattened_json_table = {}
def helper(i, j, s = ""):
if type(j) is dict:
for x, y in j.items():
helper(x, y, s + "_" + x)
else:
flattened_json_table.insert(s[1:], j)
helper(None, j)
return flattened_json_table
def flatten_json(input_json):
def flatten_helper(d, start = '', out=dict(), sep='_'):
for k, v in d.items():
if not isinstance(v, dict):
out[start + k] = v
else:
flatten_helper(v, start + k + sep, out)
return out
return flatten_helper(input_json)
unflat_json = {'a':{'b':'c','d':'e'}}
def flatten_json(y):
out = {}
print('Value of y:',y)
def flatten(y, name =''):
if type(y) is dict:
for x in y:
print(x)
flatten(y[x], name + x + '_')
else:
out[name[:-1]] = y
flatten(y)
return out
print(flatten_json(unflat_json))
unflattened = {"a":"b","c":{"d":"e","f":"g","h":{"i":"j","k":"l"},"m":"n"},"o":"p"}
def flatten_json(j):
flattened_json = {}
for k,v in j.items():
if type(v) is dict:
flattened_tmp = flatten_json(v)
for k_1, v_1 in flattened_tmp.items():
flattened_json[k + "_" + k_1] = v_1
else:
flattened_json[k] = v
return(flattened_json)
print(flatten_json(unflattened))
dict = { 'a': {'b':'c', 'd':'e'}}
flattened_dict = {
f'{key}_{inner_key}': inner_value
for key, value in dict.items()
for inner_key, inner_value in value.items()
}