KeyError beim Aufbau mehrdimensionaler dictionary in Python
Ich versuche zu bauen, ein Wörterbuch mit zwei Schlüssel, aber bin immer ein KeyError bei der Zuordnung der Elemente. Ich bekomme nicht die Fehlermeldung, wenn mit den einzelnen Schlüsseln getrennt, und die syntax scheint ziemlich einfach, daher bin ich überfragt.
searchIndices = ['Books', 'DVD']
allProducts = {}
for index in searchIndices:
res = amazon.ItemSearch(Keywords = entity, SearchIndex = index, ResponseGroup = 'Large', ItemPage = 1, Sort = "salesrank", Version = '2010-11-01')
products = feedparser.parse(res)
for x in range(10):
allProducts[index][x] = { 'price' : products['entries'][x]['formattedprice'],
'url' : products['entries'][x]['detailpageurl'],
'title' : products['entries'][x]['title'],
'img' : products['entries'][x]['href'],
'rank' : products['entries'][x]['salesrank']
}
Ich glaube nicht, dass das Problem liegt bei feedparser (konvertiert xml in dict) oder mit den Ergebnissen bin ich immer über amazon, da habe ich keine Probleme Gebäude ein dict, wenn Sie entweder mit 'allProducts[x] "oder" allProducts[index]', aber nicht beide.
Was bin ich?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Reihenfolge zu ordnen, um
allProducts[index][x]
zuerst ein lookup erfolgt aufallProducts[index]
zu bekommen, ein dict, dann der Wert, die Sie die Zuordnung gespeichert ist beim indexx
in diesem dict.Jedoch das erste mal durch die Schleife,
allProducts[index]
noch nicht vorhanden. Versuchen Sie dies:Da Sie wissen, alle Indizes, die eigentlich in
allProducts
im Voraus, können Sie Sie initialisieren, bevor die hand, wie dieses, statt:range
undxrange
--range
erstellt eine Liste aller zahlen (im Speicher), währendxrange
erzeugt einen iterator erzeugt, dass die zahlen eins nach dem anderen. In diesem Fallrange
ist OK, da man nur eine kleine Liste, aberxrange
ist in der Regel vorzuziehen.Wenn Sie mit Python 2.5 oder höher, dann wird diese Art von situation ist maßgeschneidert für
collections.defaultdict
.Ersetzen Sie einfach die Zeile:
Mit:
Ein Beispiel dafür:
Können Sie die setdefault Methode des Wörterbuchs.
Müssen Sie sagen, python, es ist ein dict-innen ein dict. Er hat keine Ahnung, dass allProducts[index] sollte ein anderes Wörterbuch.
Müssen Sie Zeilen wie diese, Wann immer Sie versuchen, dies zu tun (oder verwenden Sie eine defaultdict):