Ich mache ein Projekt, in dem ich Daten aus drei verschiedenen Datensätzen extrahiere und sie kombiniere, um Kampagnenbeiträge zu betrachten. Dazu habe ich die relevanten Daten aus zwei Sets in Wörterbücher (canDict und otherDict) mit ID-Nummern als Schlüssel und den Informationen, die ich benötige (Parteizugehörigkeit), als Werte umgesetzt. Dann schrieb ich ein Programm, um Parteinformation basierend auf dem Schlüssel zu ziehen (mein drittes Set enthielt auch diese ID-Nummern) und passte sie mit dem Arbeitgeber der spendenden Partei und dem gespendeten Betrag zusammen. Das war eine langatmige Erklärung, aber ich dachte, es würde helfen, diesen Code zu verstehen.Kompilieren eines Wörterbuchs durch Ziehen von Daten aus anderen Wörterbüchern
Mein Problem ist, dass mein drittes Wörterbuch (ArbeitgeberDict) aus irgendeinem Grund nicht kompiliert wird. Am Ende dieses Schritts sollte ich ein Wörterbuch mit Arbeitgebern als Schlüssel und eine Liste von Tupeln als Werte haben, aber nach dem Ausführen bleibt das Wörterbuch leer. Ich bin schon ein Dutzend Mal über diese Linie gegangen und ziehe mir die Haare aus - ich kann nicht für das Leben von mir denken, warum es nicht funktioniert, was es schwierig macht, nach Antworten zu suchen. Ich habe fast jede Zeile kommentiert, um zu versuchen, es aus dem Zusammenhang heraus zu verstehen. Kann jemand meinen Fehler finden?
Update: habe ich einen Zähler, n, auf den äußersten for-Schleife, wenn das Programm zu sehen, wurde überhaupt laufen.
Update 2: Ich fügte hinzu, eine weitere if-Anweisung bei der Erstellung der Variablen party
, die ID an Daten im Fall [0] in canDict oder in otherDict nicht existierte. Ich habe auch einige bereits vorgeschlagene Korrekturen aus den Kommentaren hinzugefügt.
n=0
with open(path3) as f: # path3 is a txt file
for line in f:
n+=1
if n % 10000 == 0:
print(n)
data = line.split("|") # Splitting each line into its entries (delimited by the symbol |)
party = canDict.get(data[0]) # data[0] is an ID number. canDict and otherDict contain these IDs as keys with party affiliations as values
if party is None:
party = otherDict[data[0]] # If there is no matching ID number in canDict, search otherDict
if party is None:
party = 'Other'
else:
print('ERROR: party is None')
x = (party, int(data[14])) # Creating a tuple of the the party (found through the loop) and an integer amount from the file path3
employer = data[11] # Index 11 in path3 is the employer of the person
if employer != '':
value = employerDict.get(employer) # If the employer field is not blank, see if this employer is already a key in employerDict
if value is None:
employerDict[employer] = [x] # If the key does not exist, create it and add a list including the tuple x as its value
else:
employerDict[employer].append(x) # If it does exist, add the tuple x to the existing value
else:
print('ERROR: employer == ''')
Mein Bauchgefühl ist 'Arbeitgeber! = '' 'Bewertet immer zu falsch. Versuchen Sie 'print (Arbeitgeber! = '')' Vor der zweiten if-Anweisung. –
In der fünften Zeile hat 'data [0]' keinen Grund, 'None' zu sein (kommt von' split'). Deine fünfte Zeile sollte also "falls Party ist keine:" sein. –
@AndrewJenkins Danke für die Idee, aber kein Glück:/Ich fügte auch einen Zähler nur um zu sehen, ob es überhaupt iterierte (siehe Update) und das ist auch eine Ausgabe von Null – boop