2017-05-05 1 views
2

Ich versuche, eine Funktion zu erstellen, die ein Array nimmt, die Daten in diesem Array (nach Quantil) ablegt und ein Wörterbuch mit den klassierten Daten füllt. In dem Wörterbuch, das erzeugt wird, möchte ich, dass die Schlüssel bin-Nummern entsprechen und dass die Werte Listen von Daten aus dem Eingabe-Array sein sollen, die innerhalb der j-ten und (j + 1) -ten Bin-Grenzen liegen.Ein Wörterbuch mit Wertelisten füllen - warum läuft meine verschachtelte Schleife nur einmal?

Hier ist mein Code:

output = [] 
def binning(array1): 
    d1 = {} # empty dictionary to fill with lists of values 
    bin_edges = sp.stats.mstats.mquantiles(array1, prob=[0.0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875,1.00]) 
    j = 0 
    while j < len(bin_edges): 
     for i in range(0, len(array1)): 
      if float(array1[i]) > bin_edges[j] and float(array1[i]) <= bin_edges[j+1]: 
       output.append(array1[i])     

      d1["bin_number{0}".format(j)]= output 
     j+=1 
     return d1 

Das Problem ist, nur die innere Schleife einmal ausgeführt wird, so dass ich eine Ausgabe wie

d1 = {'bin_number0': [value1, value2, etc.]}. 

bekommen, was ich will, ist sehen:

d1 = {'bin_number0': [value1, value2, etc.],'bin_number1': [value3, value4, etc.],'bin_number2': [value5, value6, etc.]} 

... und so weiter, so gibt es 8 Tasten, die 8 Wertelisten entsprechen.

Kann mir jemand sagen, warum die innere Schleife nur einmal läuft (für j = 0)? Ich habe es so oft angeschaut, dass ich ein frisches Paar Augen brauche.

Antwort

0

return d1 sollte nicht in die While-Schleife eingerückt werden. Entarre es so, dass es nur einmal eingerückt wird. Aus diesem Grund wird Ihr Code nur einmal durchlaufen. Hoffe das hilft!!