1

I'm really new to Python and programming in general so I have no idea how to do this. I have a JSON file that looks like this

{
    "data_0_key_0": "GDPQ",
    "data_0_key_1": "1860",
    "data_0_values_0": "20.89",
    "data_1_key_0": "GDPQ",
    "data_1_key_1": "1861",
    "data_1_values_0": "21.02",
    "data_2_key_0": "GDPQ",
    "data_2_key_1": "1862",
    "data_2_values_0": "19.93",
    "data_3_key_0": "GDPQ",
    "data_3_key_1": "1863",
    "data_3_values_0": "21.48"
}

And I would like the end result to look like this

{
"1860":"20.89",
"1861":"21.02",
"1862":"19,93",
"1863","21.48"
}

So basically

{
"data_x_key_1":"data_x_values_0"
}
Sebastien D
  • 4,369
  • 4
  • 18
  • 46
Meisternoob
  • 171
  • 7

4 Answers4

1

Basically you need to change you json in à python dictionary for this your could use the json library like that

import json

json_values = """ {
    "data_0_key_0": "GDPQ",
    "data_0_key_1": "1860",
    "data_0_values_0": "20.89",
    "data_1_key_0": "GDPQ",
    "data_1_key_1": "1861",
    "data_1_values_0": "21.02",
    "data_2_key_0": "GDPQ",
    "data_2_key_1": "1862",
    "data_2_values_0": "19.93",
    "data_3_key_0": "GDPQ",
    "data_3_key_1": "1863",
    "data_3_values_0": "21.48"
} """

json_dictionary = json.loads(json_values)

After that you can just loop over the dictionary indexes like that :

result = {}
for key in json_dictionary:
    if "key_1" in key:
        num = key.split("_")[1]
        value = json_dictionary["data_" + num + "_values_0"]
        result[key] = value

If you have any doubt on how does work one of this line, please ask me for an explanation !

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
Xiidref
  • 1,456
  • 8
  • 20
1

Try like this, If you have idea about the count of keys use that value to range :

d = {
"data_0_key_0": "GDPQ",
"data_0_key_1": "1860",
"data_0_values_0": "20.89",
"data_1_key_0": "GDPQ",
"data_1_key_1": "1861",
"data_1_values_0": "21.02",
"data_2_key_0": "GDPQ",
"data_2_key_1": "1862",
"data_2_values_0": "19.93",
"data_3_key_0": "GDPQ",
"data_3_key_1": "1863",
"data_3_values_0": "21.48"
}
d_new = dict()
for i in range(10):
    try:
       d_new.update({d["data_"+str(i)+"_key_1"]:d["data_"+str(i)+"_values_0"]})
    except KeyError:
      pass
print(d_new)

O/P :

{'1860': '20.89', '1861': '21.02', '1862': '19.93', '1863': '21.48'}
Vikas Periyadath
  • 3,088
  • 1
  • 21
  • 33
0

You could achieve this with a list dict of comprehension:

data = {
    "data_0_key_0": "GDPQ",
    "data_0_key_1": "1860",
    "data_0_values_0": "20.89",
    "data_1_key_0": "GDPQ",
    "data_1_key_1": "1861",
    "data_1_values_0": "21.02",
    "data_2_key_0": "GDPQ",
    "data_2_key_1": "1862",
    "data_2_values_0": "19.93",
    "data_3_key_0": "GDPQ",
    "data_3_key_1": "1863",
    "data_3_values_0": "21.48"
}

output = {data[v]:data[v.replace('key_1', 'values_0')] for (k,v) in enumerate(data) if 'key_1' in v }

print(output)

Output

{'1860': '20.89', '1861': '21.02', '1862': '19.93', '1863': '21.48'}

Sebastien D
  • 4,369
  • 4
  • 18
  • 46
0

Try this:

data = {
    "data_0_key_0": "GDPQ",
    "data_0_key_1": "1860",
    "data_0_values_0": "20.89",
    "data_1_key_0": "GDPQ",
    "data_1_key_1": "1861",
    "data_1_values_0": "21.02",
    "data_2_key_0": "GDPQ",
    "data_2_key_1": "1862",
    "data_2_values_0": "19.93",
    "data_3_key_0": "GDPQ",
    "data_3_key_1": "1863",
    "data_3_values_0": "21.48"
}

new_dict = {}
count=0
for i in data:
    #create dictionary key
    key = 'data_' + str(count) + '_key_1'
    #check key does not exist in dictionary
    if 'key_1' in i and key not in new_dict:
        new_dict[data[key]] = data['data_'+str(count)+'_values_0']
        count += 1
print(new_dict)

O/P:

{'1860': '20.89', '1861': '21.02', '1862': '19.93', '1863': '21.48'}
bharatk
  • 4,202
  • 5
  • 16
  • 30