Python: Holen Sie sich alle Werte im Zusammenhang mit den key in ein dictionary, wo die Werte kann eine Liste oder ein einzelnes Element
Ich bin auf der Suche, um alle Werte, die mit einem Schlüssel in einem dictionary. Manchmal ist der Schlüssel besitzt ein Wörterbuch einzelne, manchmal eine Liste von Wörterbüchern.
a = {
'shelf':{
'book':{'title':'the catcher in the rye', 'author':'j d salinger'}
}
}
b = {
'shelf':[
{'book':{'title':'kafka on the shore', 'author':'haruki murakami'}},
{'book':{'title':'atomised', 'author':'michel houellebecq'}}
]
}
Hier ist meine Methode zum Lesen der Titel von jedem Buch auf dem Regal.
def print_books(d):
if(len(d['shelf']) == 1):
print d['shelf']['book']['title']
else:
for book in d['shelf']:
print book['book']['title']
Funktioniert es, aber nicht ordentlich Aussehen oder pythonic. Die for-Schleife kann nicht auf die einzelnen Wert-Fall, daher auch die if/else.
Können Sie verbessern?
- Warum oh warum sind nicht Ihre Daten, Strukturen, konsequente...
- Drop der Mitte dict, die sowieso nur einen Schlüssel? Noch würde ein "Regal" besonders relevant mit nur einem Artikel. Das Zen of Python: "Besondere Fälle sind nicht bedeutend genug, um die Regeln zu brechen."
- haha, geht es mir nicht. Die Daten stammen wie diese von einem Yahoo-Dienst.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gegeben, Ihren code brechen, wenn Sie haben eine Liste mit einem einzigen Element (und dies ist, wie ich denke, so sollte es sein), wenn Sie können nicht wirklich ändern Sie Ihre Daten-Struktur, diese ist etwas robuster und Logik:
Warum auch immer nicht machen 'Regal' anzeigen, um eine Liste der Elemente, aber im einzelnen element Fall ist es ein ... einzelnes element der Liste? Dann würde Sie immer in der Lage sein zu behandeln, jedes Bücherregal die gleiche.
Ich würde zuerst die Eingabe konsistent ist, dann eine Schleife durch alle Bücher, selbst wenn nur eine.
Ich denke, das sieht ein wenig übersichtlicher und pythonic, obwohl einige könnte argumentieren, nicht als effizient wie Sie Ihre original-code zu erstellen, die ein array mit einem element und Schleife durch.