Ich mache einige Operationen, bei denen Daten aus einer Liste extrahiert werden, in der jedes Element ein Wörterbuch ist. Jedes Wörterbuch enthält zwei Schlüssel-Wert-Paare, die eine Zeichenfolge und dann ein int (dh {'ID': 0, 'Postleitzahl': 9414}), und dann ein Schlüssel-Wert-Paar, wo der Schlüssel eine Zeichenfolge ist, und dann eine Liste ({'Wert': [0,0,1,1,0,1]})List-Indizes müssen Ganzzahlen oder Slices sein, nicht Dict
Ich kann sehr einfach auf die Werte innerhalb dieser Liste in einem Wörterbuch in einer Liste zugreifen. Da es jedoch eine Reihe von Elementen in der Liste gibt, muss ich eine for-Schleife verwenden, um sie zu durchlaufen. Im Grunde prüft meine Methode, ob in dieser Liste in einem Diktat in einer Liste eine 1 auf dem Index steht (benutzerspezifische Nummer). Wenn dies der Fall ist, wird eine andere Liste mit den ersten beiden Schlüssel/Wert-Paaren aus dem gleichen dict aktualisiert.
So, wie folgt aus:
import returnExternalList #this method returns a list generated by an external method
def checkIndex(b):
listFiltered = {}
listRaw = returnExternalList.returnList #runs the method "returnList", which will return the list
for i in listRaw:
if listRaw[i]['Value'][b] == 1:
filteredList.update({listRaw[i]['ID']: listRaw[i]['Zip Code']})
print(filteredList)
checkIndex(1)
returnExternalList.returnList:
[{'ID':1 ,'Zip Code':1 ,'Value':[0,1,0,0,1]},{'ID':2 ,'Zip Code':2 ,'Value':[0,0,0,0,0]},{'ID':3,'Zip Code':3 ,'Value':[0,1,1,1,0]},{'ID':4 ,'Zip Code':4 ,'Value':[1,0,0,0,0]}]
expected output:
[{1:1 , 3:3}]
Ich kann for-Schleife außerhalb eines in einer Liste in einem Wörterbuch Werte in einer Liste zuzugreifen sehr einfach gerade durch dies zu tun:
print(listRaw[0]['Value'][1]) would return 1, for example.
Beim Versuch, dieses Verhalten mit der for-Schleife zu replizieren, um jeden einzelnen in der Liste zu überprüfen, erhalte ich jedoch den Fehler:
TypeError: list indices must be integers or slices, not dict
Was mache ich?
EDIT:
def returnList:
listExample = [{'ID':1 ,'Zip Code':1 ,'Value':[0,1,0,0,1]},{'ID':2 ,'Zip Code':2 ,'Value':[0,0,0,0,0]},{'ID':3,'Zip Code':3 ,'Value':[0,1,1,1,0]},{'ID':4 ,'Zip Code':4 ,'Value':[1,0,0,0,0]}]
return listExample
EDIT: Ich habe zwei der folgenden Lösungen angeboten, und während es der Fehler beseitigen bekommt (danke!) Ist der Ausgang einfach Da es, returnExternalList gefragt wurde, ein leeres Wörterbuch.
Code:
for i in listRaw:
if i['Value'][b] == 1:
filteredList.update({i['ID']: i['Zip Code']})
or
for i in range(len(listRaw):
if listRaw[i]['Value'][b] == 1:
filteredList.update({listRaw[i]['ID']: listRaw[i]['Zip Code']})
EDIT:
Es funktioniert jetzt, der Grund, die Liste leer war, weil ich 1 auf '1' zu vergleichen. Es wurde behoben. Vielen Dank.
möglich, den gesamten Fehler-Stack zu teilen? – glls
@Glls Ich bin 100% sicher, dass es funktioniert, da, wenn ich versuche, die Liste von returnExternalList über in dieser Methode zu drucken, funktioniert es. Ich werde es nur aktualisieren, um sicher zu gehen. – user132520
sieht aus wie Sie versuchen, ein dict iterieren wie die Typeerror zeigt ... – glls