0

I currently have a dictionary in Python3 that looks like this

{'parentkey1': {'value1': 3, 'value2': 0},
 'parentkey2': {'value1': 2, 'value2': 5},
 'parentkey3': {'value1': 6, 'value2': 9},
 'parentkey4': {'value1': 8, 'value2': 3}
 }

Is there a way that I can arrange the nested dictionary that it becomes

{'parentkey1': {'value2': 0, 'value1': 3},
 'parentkey2': {'value1': 2, 'value2': 5},
 'parentkey3': {'value1': 6, 'value2': 9},
 'parentkey4': {'value2': 3, 'value1': 8}
}
kederrac
  • 16,819
  • 6
  • 32
  • 55
CodeName
  • 559
  • 2
  • 6
  • 23

3 Answers3

2

since python 3.6 the dictionaries are insertion ordered so you can use:

 d = {'parentkey1': {'value1': 3, 'value2': 0},
 'parentkey2': {'value1': 2, 'value2': 5},
 'parentkey3': {'value1': 6, 'value2': 9},
 'parentkey4': {'value1': 8, 'value2': 3}
 }

d = {k : dict(sorted(v.items(), key=lambda x: x[1])) for k, v in d.items()}
d

output:

{'parentkey1': {'value2': 0, 'value1': 3},
 'parentkey2': {'value1': 2, 'value2': 5},
 'parentkey3': {'value1': 6, 'value2': 9},
 'parentkey4': {'value2': 3, 'value1': 8}}

you can use OrderedDict if you want insertion order to be guaranteed across other implementations of Python

kederrac
  • 16,819
  • 6
  • 32
  • 55
1

here you go.

  data = {'parentkey1': {'value1': 3, 'value2': 0},
  'parentkey2': {'value1': 2, 'value2': 5},
  'parentkey3': {'value1': 6, 'value2': 9},
  'parentkey4': {'value1': 8, 'value2': 3}
  }

  for key, value in data.items():
    print(value)

  print("\n")

  for key, value in data.items():
    new = {}
    if value["value1"] >=  value["value2"]:
      new["value2"] = value["value2"]
      new["value1"] = value["value1"]
    else:
      new["value1"] = value["value1"]
      new["value2"] = value["value2"]
    data[key] = new

  for key, value in data.items():
    print(value)
OmegaOdie
  • 373
  • 2
  • 8
0

Can do by simply switching values if value2 > value1 for each item

data = {'parentkey1': {'value1': 3, 'value2': 0},
  'parentkey2': {'value1': 2, 'value2': 5},
  'parentkey3': {'value1': 6, 'value2': 9},
  'parentkey4': {'value1': 8, 'value2': 3}
  }


for key, value in data.items():
    if value['value1'] > value['value2']:
        value['value1'], value['value2'] = value['value2'], value['value1']
SenAnan
  • 276
  • 4
  • 10