2016-11-24 7 views
0

So habe ich verschachtelt Python Liste der dicts wie folgt:Split eine verschachtelte Python Liste der Wörterbücher in 2 Wörterbücher

{"types": [{ "name": "Chinese", 
      "sub": 
       [{ 
        "menu": [{"name": "Ya", "cost": 1}, {"name": "Ja", "cost": 2}], 
        "name": "Soups" 
       }, 
       { 
        "menu": [{"name": "Ta", "cost": 3}, {"name": "Ba", "cost": 4}], 
        "name": "Mains" 
       }] 
      }] 
} 

Was ich wollte dies die dicts innerhalb der inneren Liste trennen sollte, um endlich zu bekommen:

{"types": [{"name": "Chinese(Soups)", 
      "menu": [{"name": "Ya", "cost": 1}, {"name": "Ja", "cost": 2}]}, 

      {"name": "Chinese(Mains)", 
      "menu": [{"name": "Ta", "cost": 3}, {"name": "Ba", "cost": 4}]} 
      ] 
} 

Manche Dinge sind zu beachten,:

  • Der neue Name Schlüssel ist eine Kombination aus inneren und äußeren Name Schlüssel
  • Die Typen Schlüssel eine Liste ist und kann mehr als 1 Element haben und somit Antworten sollten im Idealfall von diesem Fall kümmern

Was das ist Der beste Weg, um das zu erreichen?

Antwort

2

Ich bin mir nicht sicher, ob du das wirklich so willst, aber hier bist du.

{'types': [ 
    {'name': '%s(%s)' % (outer['name'], inner['name']), 
    'menu': inner['menu']} 
    for outer in original_dict['types'] 
    for inner in outer['sub']]} 

UPD: Wenn Sie das ursprüngliche Wörterbuch aktualisiert werden möchten, können Sie, dass auf diese Weise tun:

original_dict['types'] = [ 
    {'name': '%s(%s)' % (outer['name'], inner['name']), 
    'menu': inner['menu']} 
    for outer in original_dict['types'] 
    for inner in outer['sub']] 
+0

dies eine neue dict schafft altogether..is es möglich, diese Veränderungen, indem sie tun, um das bestehende Diktat? – Amistad

+0

@Amistad, was ist das Problem mit einem neuen Wörterbuch? Brauchen Sie wirklich genau das gleiche geänderte Wörterbuchobjekt? Persönlich würde ich mich hier nicht um Performance- oder Speicherprobleme kümmern und würde das neue Dictionary einfach der vorhandenen Variablen zuweisen: original_dict = {'types': [... in original_dict ...]}} –

+0

Das Problem ist, dass diese Frage ist eine Teilmenge eines größeren Problems, das ich versuche zu lösen. Das existierende Diktat zu modifizieren, ohne ein neues zu erstellen, wird helfen, das größere Problem schneller zu lösen. – Amistad

Verwandte Themen