Ich habe derzeit ein Wörterbuch in Python3, das so aussieht

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

Gibt es eine Möglichkeit, das verschachtelte Wörterbuch so anzuordnen, dass es wird?

{'parentkey1': {'value2': 0, 'value1': 3},
 'parentkey2': {'value1': 2, 'value2': 5},
 'parentkey3': {'value1': 6, 'value2': 9},
 'parentkey4': {'value2': 3, 'value1': 8}
}
0
CodeName 19 Feb. 2020 im 15:03

3 Antworten

Beste Antwort

Seit Python 3.6 sind die Wörterbücher nach Einfügungsreihenfolge angeordnet, sodass Sie Folgendes verwenden können:

 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

Ausgabe:

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

Sie können OrderedDict verwenden, wenn die Einfügereihenfolge garantiert werden soll über andere Implementierungen von Python

2
kederrac 19 Feb. 2020 im 14:07

Bitte schön.

  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)
1
OmegaOdie 19 Feb. 2020 im 12:10

Dies kann durch einfaches Umschalten der Werte erfolgen, wenn für jedes Element Wert2> Wert1 ist

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']
0
SenAnan 19 Feb. 2020 im 12:18