Dictionary / Listen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Berliner9597
User
Beiträge: 1
Registriert: Samstag 25. April 2020, 14:18

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.
nutelli
User
Beiträge: 3
Registriert: Samstag 25. April 2020, 13:10

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
Sirius3
User
Beiträge: 18253
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Julie
User
Beiträge: 7
Registriert: Samstag 25. April 2020, 14:11

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 ;)
Antworten