Seite 1 von 1
Dictionary / Listen
Verfasst: Samstag 25. April 2020, 14:27
von Berliner9597
Hallo zusammen, bei folgender Aufgabe benötige ich bitte einmal eure Hilfe:
Lies zuerst die Daten in ein Dictionary ein und zähle, wie oft jeder Vorname insgesamt vorgekommen ist.
Das habe ich geschrieben:
file = open("../data/names.csv", "r")
d = {}
for line in file:
splitted_line = []
splitted_line.append(line.strip().split(","))
for element in splitted_line:
name = element[1]
count = int(element[5])
if name == "Name":
continue
if name in d:
d[name] = d[name] + count
else:
d[name] = count
d = {name: count}
print(d)
Folgendes Ergebnis bekomme ich:
{'Waylon': 5}
So ist die Datei aufgebaut:
[['Id', 'Name', 'Year', 'Gender', 'State', 'Count']]
[['1', 'Mary', '1910', 'F', 'AK', '14']]
[['2', 'Annie', '1910', 'F', 'AK', '12']]
Vielen Dank für eure Hilfe.
Re: Dictionary / Listen
Verfasst: Samstag 25. April 2020, 15:07
von nutelli
Hi!
Ich verstehe nicht genau, was deine Frage ist - was daran liegen mag, dass du diese nicht formuliert hast!?
Vielleichst packst du deinen Quellcode noch in code-Blöcke. Das erhöht die Lesbarkeit erheblich.
Ich bin nicht sicher ob dir das hier hilft, weil ich die Frage nicht kenne, aber die Aufgabe kannst du mithilfe von pandas auch so lösen:
Code: Alles auswählen
import pandas as pd
list = {
'Id': ['1', '2', '3'],
'Name': ['Mary', 'Annie', 'Mary'],
'Year':['1910', '1910', '2000'],
'Gender':['F', 'F', 'F'],
'State':['AK', 'AK', 'AK'],
'Count':['14', '12', '15']
}
df = pd.DataFrame(data=list)
print(df.groupby('Name').Name.count())
Ergebnis:
Name
Annie 1
Mary 2
VG
nutelli
Re: Dictionary / Listen
Verfasst: Samstag 25. April 2020, 15:37
von Sirius3
Damit man ersteinmal sieht, wie Dein Programm aussieht, hier in Code-Tags </>
Code: Alles auswählen
file = open("../data/names.csv", "r")
d = {}
for line in file:
splitted_line = []
splitted_line.append(line.strip().split(","))
for element in splitted_line:
name = element[1]
count = int(element[5])
if name == "Name":
continue
if name in d:
d[name] = d[name] + count
else:
d[name] = count
d = {name: count}
print(d)
`file` wird geöffnet aber nicht wieder geschlossen. `d` wird als leeres Wörterbuch angelegt und gefüllt, aber zum Schluß wieder weggeworfen und durch dieses ein-Elementige Wörterbuch ersetzt.
`splitted_line` enthält, wie der Name schon sagt, eine Zeile verpackt in einer ein-elementigen Liste, weil splitted_line in jedem for-Schleifendurchgang wieder leer initalisiert wird.
`continue` sollte man nicht verwenden. Hier ist es überhaupt unsinnig, weil nur die erste Zeile der Datei ignoriert werden sollte, und nicht "Name" in jeder Zeile geprüft werden.
Das es sich um eine csv-Datei handelt, solltest Du aber gar nicht selbst eine Leseroutine schreiben, sondern das csv-Modul verwenden. Am besten gleich csv.DictReader, dann wird die Kopfzeile auch gleich richtig verarbeitet.
Re: Dictionary / Listen
Verfasst: Samstag 25. April 2020, 15:41
von Julie
Die Aufgabe ist lautet: "Lies zuerst die Daten in ein Dictionary ein und zähle, wie oft jeder Vorname insgesamt vorgekommen ist."
Das ist aus einem Video Kurs. Die Musterlösung wird aber ausführlich im nächsten Video erklärt
