Bei Listen sind die Elemente durchgehend nummeriert. Mit Dictionaries bietet Python einen weiteren zusammengesetzten Datentyp an, wobei jedes Element aus zwei Teilen besteht: einem Schlüssel und einem Wert. Dabei ersetzt der Schlüssel sozusagen die Nummerierung der Liste. Der Schlüssel muss eindeutig sein.
dictionary = {"am": "Vormittag", "pm": "Nachmittag"}
for key in dictionary:
print(" key:", key)
print("value:", dictionary[key])
print()
2
3
4
5
6
# Dictionary definieren
Python erkennt Dictionaries an Hand der geschweiften Klammern. Vorgegebene Werte werden duch Kommas getrennt. Der Dictionary kann aber auch leer sein. Jeder Eintrag besteht aus einem Key und einem Wert, getrennt durch einen Doppelpunkt.
wochentage = { # Dictionary mit 3 Elementen
"Mo": "Montag",
"Di": "Dienstag",
"Mi": "Mittwoch"
}
monate = {1: "Jan", 12: "Dez"} # Dictionary mit einem Elemente
jahre = {} # leerer Dictionary
2
3
4
5
6
7
# Anzahl Einträge
Mit len(dict)
erhält man die Anzahl Elemente des Dictionarys dict
.
# Auf Werte einzelner Elemente zugreifen
Möchte man auf die Werte einzelner Elemente des Dictionarys zugreifen, so muss man deren Schlüssel kennen. Man schreibt den Namen des Dictionarys und hängt in eckiger Klammer den Schlüssel des gewünschten Elementes an.
wochentage = {
"Mo": "Montag",
"Di": "Dienstag",
"Mi": "Mittwoch"
}
dienstag = wochentage["Di"]
print("Di ist die Abkürzung für", dienstag)
2
3
4
5
6
7
Aufgabe «Würfelsumme»
Wir versuchen Würfe mit zwei Würfeln zu simulieren. Dabei würfeln wir 1000 mal und merken uns dabei jeweils die Augensumme der beiden Würfel. Das Ergebnis sollte ein Verteilung der möglichen summierten Augenpunkten sein.
Eine mögliche Vorgehensweise wäre:
- Verteilung als Dictionary definieren: als Schlüssel alle möglichen Augensummen, als Startwert überall eine
0
- 1000 Würfe simulieren in einer while-Schleife mit Hilfe einer Zählvariablen und Zufallszahlen für die Würfel, dabei jeweils den Dictionary an der entsprechenden Stelle (Augensumme) eins vergrössern
- Nach der Schleife den Dictionary ausgeben
«Würfelsumme»
from random import randint
verteilung = {}
augensumme = 2
while augensumme <= 12:
verteilung[augensumme] = 0
augensumme = augensumme + 1
anzahl_wuerfe = 0
while anzahl_wuerfe < 1000:
wuerfel1 = randint(1,6)
wuerfel2 = randint(1,6)
augensumme = wuerfel1 + wuerfel2
verteilung[augensumme] = verteilung[augensumme] + 1
anzahl_wuerfe = anzahl_wuerfe + 1
print(verteilung)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Zufallszahlen
Bis jetzt hatten wir Zufallszahlen zwischen 0 und 1 verwendet. Mit x = random.randint(a,b)
kannst du eine ganze Zufallszahl
# for-in-Schleife
Die for-in-Schleife beim Dicitionary iteriert über die Schlüssel der Elemente. Mit dem Schlüssel können wir aber die Werte erhalten:
dictionary = {"am": "Vormittag", "pm": "Nachmittag"}
for key in dictionary:
print(" key:", key)
print("value:", dictionary[key])
print()
2
3
4
5
6
Aufgabe «Notendurchschnitt 2»
Berechne den Notendurchschnitt über alle Fächer mit der gegebenen Vorlage:
noten = {
"Math": 4.5,
"Deutsch": 5.5,
"Geo": 6,
"Sport": 4.75
}
2
3
4
5
6
«Notendurchschnitt 2»
noten = {
"Math": 4.5,
"Deutsch": 5.5,
"Geo": 6,
"Sport": 4.75
}
summe = 0
for fach in noten:
summe = summe + noten[fach]
durchschnitt = summe/len(noten)
2
3
4
5
6
7
8
9
10
11
# Elemente hinzufügen
Neue Elemente können direkt gesetzt werden. Man macht eine Zuweisung mit einen neuen Schlüssel:
wochentage = {
"Mo": "Montag",
"Di": "Dienstag",
"Mi": "Mittwoch"
}
wochentage["Do"] = "Donnerstag"
2
3
4
5
6
# Elemente entfernen
Um ein Element zu entfernen muss man dessen Schlüssel kennen. Dann kann man es mit der Methode pop()
entfernen:
wochentage = {
"Mo": "Montag",
"Di": "Dienstag",
"Mi": "Mittwoch"
}
wochentage.pop("Mi")
2
3
4
5
6
Aufgabe «Textanalyse 3»
Wir wollen für einen vorgegeben Text eine Buchstabenhäufigkeitstabelle erstellen. Mit einer Liste ist das etwas umständlich. Aber ein Dictionary ist dafür sehr gut geeignet: Jeder Buchstabe des Textes erhält einen Eintrag, wobei der Schlüssel der Buchstabe selbst ist. Als Wert merkt man sich wie oft dieser Buchstabe im Text vorkommt.
«Textanalyse 3»
def textanalyse(text):
haeufigkeit = {}
for zeichen in text:
zeichen_klein = zeichen.lower()
if zeichen_klein.isalpha():
if zeichen_klein in haeufigkeit:
haeufigkeit[zeichen_klein] = haeufigkeit[zeichen_klein] + 1
else:
haeufigkeit[zeichen_klein] = 1
return haeufigkeit
resultat = textanalyse("the quick brown fox jumps over the lazy dog")
print(resultat)
for key in sorted(resultat):
print(key, ":", resultat[key])
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# JSON
JSON steht für JavaScript Object Notation und hat sich in den letzten Jahren als Standard für automatisierte Schnittstellen im Web etabliert. Dabei werden eigentlich Dictionaries und Listen kombiniert und mit []
und {}
dargestellt:
{
"drinks" : [
{
"name" : "sirup",
"alcohol": false,
"calories_per_liter": 220
},
{
"name" : "beer",
"alcohol": true,
"calories_per_liter": 370
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
- Zeile 2
drinks
ist der erste (und einzige) Eintrag des «Hauptdictionairies»- er besteht aus einer Liste von 2 Dictionaries
- Zeile 4-6
- Der erste Dictionary in der Liste
drinks
- Er besteht aus 3 Einträgen: Ein String
name
, ein Booleanalcohol
und eine Zahlcalories_per_liter
Die Internseite des Gymnasiums bietet einige solcher öffentlich zugänglichen JSON-Requests:
- Termine
- Liste der öffentlichen Termine des Gymers
👉 https://intern.gymkirchenfeld.ch/json/event (opens new window) - Ferien pro Schuhljahr
- Liste aller Schuhljahre mit jeweils einer Liste der Ferien, also eine Liste mit Listen!
👉 https://intern.gymkirchenfeld.ch/json/holiday (opens new window) - Fächer des Gymers
- Liste aller Fächer des Gymnasiums
👉 https://intern.gymkirchenfeld.ch/json/subject (opens new window) - Semester
- Liste aller Semester
👉 https://intern.gymkirchenfeld.ch/json/term (opens new window)
So erhält man z.B. über die «subject»-URL eine Beschreibung aller am Gymer unterrichteten Fächer.
import requests
import json
data = requests.get(url="https://intern.gymkirchenfeld.ch/json/subject").json()
print(type(data))
print(data)
subjects = data["subjects"]
print(type(subjects))
for subject in subjects:
print(subject["code"], ":", subject["description"])
2
3
4
5
6
7
8
9
10
11
12
- Zeile 1 & 2
- Libraries importieren
- Zeile 4
- mit der
get
-Methode desrequests
-Objektes wird ein https-Request gemacht und die Antwort mittelsjson()
in einen Python-Dictionary umgewandelt - Zeile 8
- wir greifen auf die Liste
subjects
zu - Zeile 11 & 12
- Wir gehen die Liste Fach um Fach durch und zeigen Abkürzung und Beschreibung des Fachs
Zusatzaufgabe «JSON»
Wähle eine der 4 oben beschriebenen JSON-Schnittstellen unserer intern-Plattform aus
- Erforsche die Struktur indem du die URL direkt im Browser öffnest (ev. kannst du JSON-Code online in einem Code-Formatter (opens new window) schöner darstellen)
- Programmiere ein Python-Programm welches die Daten durchgeht und einige interessante Teile (so wie im Beispiel) ausgibt.
← Listen Komplexität →