2016-10-19 5 views
-1

Für meine letzte Python-Aufgabe an meiner Universität muss ich Funktionen innerhalb von Jupyter Notebook erstellen, um eine kleine Recherche durchzuführen. Ich muss Wörterbücher und Listen aus .csv-Dateien erstellen und Funktionen für die Wörterbücher erstellen, die ich von meiner Funktion read_csv() bekomme. Für diese Aufgabe darf ich fragen und googlen, weil die Funktionen, die ich zu erledigen habe, ziemlich häufig auftretende Probleme sind.Durchschnittswerte von Wörterbüchern mit Schlüsseln mit einer Liste von Werten erhalten

Die Art und Weise diese Wörterbücher aussehen wie nach meinem read_csv() gibt sie wie folgt:

data_dict = { "abc" : [1, 2, 3, 4], 
       "def" : [4, 5, 6, 7], 
       "ghi" : [8, 9, 10, 11] 
      } 

Also im Grunde ein Wörterbuch mit einer großen Menge von Tasten mit jeweils einer Liste von Werten. Was ich tun muss, ist, alle Zahlen des ersten Index jeder Liste zusammenzufassen und den Durchschnitt von der Summe, dann den zweiten Index, den dritten Index usw. zu erhalten und eine Liste aller Durchschnittswerte zurückzugeben. Das Ergebnis ist etwas wie:

averages = [4.333, 5.333, 6.333, 7.333] 

Wie würde man darüber gehen, ohne etwas zu importieren? In den letzten Wochen haben wir nicht wirklich darüber gesprochen, mit Wörterbüchern zu arbeiten, und ich habe versucht, nach Lösungen im Internet zu suchen, konnte aber keinen Umgang mit der Zusammenfassung von Ganzzahlen oder Gleitkommazahlen bei bestimmten Indizes aus verschiedenen Listen finden.

+0

Verwenden Sie auch 'data_dict.values ​​()' – jcfollower

+0

Warum keine Importe? –

+0

@PadraicCunningham Hausaufgabe – idjaw

Antwort

0

zip die Werte, um die Spalten zu erhalten, und teilen Sie jede Spalte sum durch seine len.

2

zuerst die Werte sammeln, transponieren und dann ist es einfach:

# values of the dict 
values = data_dict.values() 

# transposed average 
averages = [sum(x)/float(len(x)) for x in zip(*values)] 
print (averages) 

kehrt:

[4.333333333333333, 5.333333333333333, 6.333333333333333, 7.333333333333333] 

Eine kürzere 'weniger erklärend' Einzeiler wäre:

averages = [sum(x)/float(len(x)) for x in zip(*data_dict.values())] 
+1

Was rufst du an? –

+0

Sie sollten nicht 'list' aufrufen, es ist nicht notwendig. – idjaw

+0

Art von unnötigen ich denke, machte den Schnitt. –

0

Ein Ansatz könnte sein:

data_dict = { "abc" : [1, 2, 3, 4], 
       "def" : [4, 5, 6, 7], 
       "ghi" : [8, 9, 10, 11] 
      } 
l1 = data_dict.values() 
l2 = [] 
for i in zip(*l1): 
    l2.append(float(sum(i))/float(len(i))) 
print l2 
+0

Hoppla, ich war an diesem Tag in Eile. Bearbeitete den Code. – JeyJey

Verwandte Themen