2016-07-26 9 views
0

Ich habe versucht, herauszufinden, wie diese Wörterbücher zu sortieren: d1 und d2 innerhalb des Wörterbuchs d3.verschachtelt Wörterbuch Sortierung

d1 = {'eggs':1, 'cheese':1} 
d2 = {'cake':1, 'cream':1} 
d3 = {'breakfast':{},'dessert':{}} 
d3['breakfast'] = d1 
d3['dessert'] = d2 
for k,v in sorted(d3.items()): 
    for k,v in sorted(d3['breakfast'].items()): 
     for k,v in sorted(d3.items()): 
      print(k,v) 

Dies ist die Ausgabe:

breakfast {'eggs': 1, 'cheese': 1} 
dessert {'cream': 1, 'cake': 1} 
breakfast {'eggs': 1, 'cheese': 1} 
dessert {'cream': 1, 'cake': 1} 
breakfast {'eggs': 1, 'cheese': 1} 
dessert {'cream': 1, 'cake': 1} 
breakfast {'eggs': 1, 'cheese': 1} 
dessert {'cream': 1, 'cake': 1} 

Es sortiert die beiden breakfast und dessert korrekt, dann in dessert, 'cream' und 'eggs' in der falschen Reihenfolge sind.

Es sollte sein:

dessert {'cake':1, 'cream':1} 

und druckt es auch die „sortiert“ Wörterbuch d3 viermal, und ich bin mir nicht ganz sicher, warum.

Nach allem, was ich weiß, könnte es eine effektivere Methode sein, dies zu tun, so dass jede Information willkommen ist.

+0

Bitte erläutern Sie, was Sie * wollten * (z. B. welche Ausgabe Sie sehen wollten), wie es aus Ihrer Frage nicht klar ist. – Amadan

+0

das ist unlogischer Code, weil Sie nur die letzte for Schleife machen könnten, würden Sie zwei Ausgaben bekommen, ich bekomme Ihren Code nicht –

+0

Sie sollten nicht 3 verschachtelte 'for' Schleifen haben, die alle die gleichen Schleifenvariablen haben (' k 'und 'v'), da die beiden äußeren Schleifen im Grunde nur die innere 4x ausführen lassen. Beachten Sie, dass '' print (k, v) '' '' '' das ganze Wörterbuch unsortiert ausdruckt. –

Antwort

2

Also hat Ihr Algorithmus ein paar Probleme, meistens, dass Sie viel zu oft verschachteln und jedes Mal dasselbe wiederholen. Hier ist ein besserer Algorithmus:

for k,v in sorted(d3.items()): 
    print(k + ":") 
    for k2,v2 in sorted(v.items()): 
     print("\t" + k2 + ", " + str(v2)) 

Es formatiert die Antwort wie folgt aus:

breakfast: 
    cheese, 1 
    eggs, 1 
dessert: 
    cake, 1 
    cream, 1 

ich nicht sicher war, was Ihr bestimmt Format ist - hoffentlich können Sie es ändern sein, was Sie möchten. Wie Sie sehen können, iteriert die Schleife dieses Mal zuerst über d3, dann über die Elemente von d3, anstatt wieder d3. Dies bedeutet, dass Sie eine tiefere Ebene im verschachtelten Wörterbuch verwenden als das, was Sie zuvor getan haben und das gleiche Wörterbuch mehrmals gedruckt hat.

+0

Also habe ich das versucht und ich musste() zu den Druckanweisungen hinzufügen, weil es mir einen Fehler gab, zuerst war es nicht funktionierend, aber dann hatte ich gerade die() um die falsche Sache. Es funktioniert jetzt danke! Dies war nur ein Test-Code, um die Idee, wie es funktioniert, dann implementieren Sie es in ein anderes Programm im arbeiten. – Doppel

+0

Hat es nicht für Sie funktioniert? Wolltest du etwas anderes machen? Ich werde mehr Informationen brauchen als das – James

+0

Entschuldigung, ich drücke weiter Enter und es postet den Kommentar, wenn ich meine, eine Zeile zu gehen. Ich werde versuchen, dies in mein Hauptprogramm zu implementieren, wenn ich noch Hilfe brauche, kann ich es einfach zu dieser Frage hinzufügen? – Doppel

0
d1 = {'eggs':1, 'cheese':1} 
d2 = {'cake':1, 'cream':1} 
d3 = {'breakfast':{},'dessert':{}} 
d3['breakfast'] = d1 
d3['dessert'] = d2 
for key,val in sorted(d3.items()): 
    print(key,val) 
+1

Bitte bearbeiten Sie mit mehr Informationen. Code-only und "try this" Antworten werden abgeraten, da sie keine durchsuchbaren Inhalte enthalten und nicht erklären, warum jemand "das versuchen sollte". – abarisone