Python Crash Course

Kapitel 6

Dictionaries

Schlüssel-Wert-Paare und Datenstrukturen

Was sind Dictionaries?

  • Sammlung von Schlüssel-Wert-Paaren
  • Schneller Zugriff über Schlüssel
  • Veränderbar und ungeordnet
  • Ideal für verwandte Informationen
alien_0 = {'color': 'green', 'points': 5}

print(alien_0['color'])    # green
print(alien_0['points'])   # 5

# Neuen Wert hinzufügen
alien_0['x_position'] = 0
alien_0['y_position'] = 25

Zugriff auf Dictionary-Werte

alien_0 = {'color': 'green', 'points': 5}

# Direkter Zugriff
new_points = alien_0['points']
print(f"You just earned {new_points} points!")

# Mit get() - sicherer Zugriff
point_value = alien_0.get('points', 0)
speed = alien_0.get('speed', 'No speed value assigned')

print(point_value)  # 5
print(speed)        # No speed value assigned

🛠️ Übung 1: Einfache Dictionaries

🔗 jupyter.gymnasium-hummelsbuettel.de

Aufgaben 6-1 bis 6-3:

  • 6-1: Person - Informationen speichern
  • 6-2: Lieblingszahlen verschiedener Personen
  • 6-3: Glossar mit Programmierbegriffen

→ kapitel_6_aufgaben_6-1_6-3.ipynb

↓ Lösungen

💡 Lösung 6-1

# 6-1: Person
person = {
    'first_name': 'Max',
    'last_name': 'Mustermann',
    'age': 25,
    'city': 'Hamburg'
}

print(f"Name: {person['first_name']} {person['last_name']}")
print(f"Alter: {person['age']}")
print(f"Stadt: {person['city']}")

Ausgabe:

Name: Max Mustermann
Alter: 25
Stadt: Hamburg

💡 Lösung 6-2

# 6-2: Lieblingszahlen
favorite_numbers = {
    'alice': 7,
    'bob': 42,
    'charlie': 13,
    'diana': 3,
    'eve': 21
}

for name, number in favorite_numbers.items():
    print(f"{name.title()}s Lieblingszahl ist {number}.")

Ausgabe:

Alices Lieblingszahl ist 7.
Bobs Lieblingszahl ist 42.
Charlies Lieblingszahl ist 13.
Dianas Lieblingszahl ist 3.
Eves Lieblingszahl ist 21.

💡 Lösung 6-3

# 6-3: Glossar
glossar = {
    'variable': 'Ein Container für einen Wert',
    'list': 'Eine Sammlung von Elementen in einer bestimmten Reihenfolge',
    'dictionary': 'Eine Sammlung von Schlüssel-Wert-Paaren',
    'function': 'Ein benannter Codeblock, der eine bestimmte Aufgabe erfüllt',
    'loop': 'Eine Anweisung, die Code wiederholt ausführt'
}

for begriff, bedeutung in glossar.items():
    print(f"{begriff.title()}:")
    print(f"\t{bedeutung}\n")

Ausgabe:

Variable:
	Ein Container für einen Wert

List:
	Eine Sammlung von Elementen in einer bestimmten Reihenfolge

Dictionary:
	Eine Sammlung von Schlüssel-Wert-Paaren

Function:
	Ein benannter Codeblock, der eine bestimmte Aufgabe erfüllt

Loop:
	Eine Anweisung, die Code wiederholt ausführt

Dictionaries durchlaufen

user_0 = {
    'username': 'efermi',
    'first': 'enrico',
    'last': 'fermi',
}

# Alle Schlüssel-Wert-Paare
for key, value in user_0.items():
    print(f"\nKey: {key}")
    print(f"Value: {value}")

# Nur Schlüssel
for name in user_0.keys():
    print(name.title())

# Nur Werte
for value in user_0.values():
    print(value.title())

Wichtige Dictionary-Methoden

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
}

# Eindeutige Werte mit set()
print("Die folgenden Sprachen wurden genannt:")
for language in set(favorite_languages.values()):
    print(language.title())

# Sortierte Schlüssel
for name in sorted(favorite_languages.keys()):
    print(f"{name.title()}, thank you for taking the poll.")

🛠️ Übung 2: Dictionaries durchlaufen

Aufgaben 6-4 bis 6-6:

  • 6-4: Glossar 2 - Schleife verwenden
  • 6-5: Flüsse - Dictionary durchlaufen
  • 6-6: Umfrage - wer hat teilgenommen?

→ kapitel_6_aufgaben_6-4_6-6.ipynb

↓ Lösungen

💡 Lösung 6-4

# 6-4: Glossar 2
glossar = {
    'variable': 'Ein Container für einen Wert',
    'list': 'Eine Sammlung von Elementen',
    'dictionary': 'Schlüssel-Wert-Paare',
    'function': 'Ein benannter Codeblock',
    'loop': 'Wiederholte Code-Ausführung',
    'string': 'Eine Folge von Zeichen',
    'integer': 'Eine ganze Zahl',
    'float': 'Eine Gleitkommazahl'
}

for begriff, bedeutung in glossar.items():
    print(f"{begriff.title()}:\n\t{bedeutung}\n")

Ausgabe:

Variable:
	Ein Container für einen Wert

List:
	Eine Sammlung von Elementen

Dictionary:
	Schlüssel-Wert-Paare

Function:
	Ein benannter Codeblock

Loop:
	Wiederholte Code-Ausführung

String:
	Eine Folge von Zeichen

Integer:
	Eine ganze Zahl

Float:
	Eine Gleitkommazahl

💡 Lösung 6-5

# 6-5: Flüsse
rivers = {
    'nil': 'ägypten',
    'mississippi': 'vereinigte staaten',
    'fraser': 'kanada',
    'kuskokwim': 'alaska',
    'yangtze': 'china'
}

for river, country in rivers.items():
    print(f"Der {river.title()} fließt durch {country.title()}.")

print("\nFlüsse:")
for river in rivers.keys():
    print(f"- {river.title()}")

print("\nLänder:")
for country in set(rivers.values()):
    print(f"- {country.title()}")

Ausgabe:

Der Nil fließt durch Ägypten.
Der Mississippi fließt durch Vereinigte Staaten.
Der Fraser fließt durch Kanada.
Der Kuskokwim fließt durch Alaska.
Der Yangtze fließt durch China.

Flüsse:
- Nil
- Mississippi
- Fraser
- Kuskokwim
- Yangtze

Länder:
- Alaska
- Ägypten
- China
- Kanada
- Vereinigte Staaten

💡 Lösung 6-6

# 6-6: Umfrage
favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
}

poll_participants = ['jen', 'sarah', 'edward', 'phil', 'alice', 'bob']

for name in poll_participants:
    if name in favorite_languages.keys():
        print(f"Danke für deine Teilnahme, {name.title()}!")
    else:
        print(f"{name.title()}, bitte nimm an unserer Umfrage teil!")

Ausgabe:

Danke für deine Teilnahme, Jen!
Danke für deine Teilnahme, Sarah!
Danke für deine Teilnahme, Edward!
Danke für deine Teilnahme, Phil!
Alice, bitte nimm an unserer Umfrage teil!
Bob, bitte nimm an unserer Umfrage teil!

Listen in Dictionaries

pizza = {
    'crust': 'thick',
    'toppings': ['mushrooms', 'extra cheese'],
}

print(f"You ordered a {pizza['crust']}-crust pizza "
      "with the following toppings:")

for topping in pizza['toppings']:
    print(f"\t{topping}")

# Dictionary in Dictionary
users = {
    'aeinstein': {
        'first': 'albert',
        'last': 'einstein',
        'location': 'princeton',
    },
    'mcurie': {
        'first': 'marie',
        'last': 'curie',
        'location': 'paris',
    },
}

Listen von Dictionaries

alien_0 = {'color': 'green', 'points': 5}
alien_1 = {'color': 'yellow', 'points': 10}
alien_2 = {'color': 'red', 'points': 15}

aliens = [alien_0, alien_1, alien_2]

for alien in aliens:
    print(alien)

# Aliens automatisch erstellen
aliens = []
for alien_number in range(30):
    new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
    aliens.append(new_alien)

# Erste 5 aliens anzeigen
for alien in aliens[:5]:
    print(alien)

🛠️ Übung 3: Komplexe Datenstrukturen

Aufgaben 6-7 bis 6-12:

  • 6-7: Menschen - Liste von Dictionaries
  • 6-8: Haustiere - Dictionaries in Liste
  • 6-9: Lieblingsplätze - Listen als Werte
  • 6-10/11: Lieblingszahlen, Städte
  • 6-12: Erweiterungen

→ kapitel_6_aufgaben_6-7_6-12.ipynb

↓ Lösungen

💡 Lösung 6-7

# 6-7: Menschen
person_1 = {'first_name': 'Alice', 'last_name': 'Smith', 'age': 25, 'city': 'Hamburg'}
person_2 = {'first_name': 'Bob', 'last_name': 'Jones', 'age': 30, 'city': 'Berlin'}
person_3 = {'first_name': 'Charlie', 'last_name': 'Brown', 'age': 22, 'city': 'München'}

people = [person_1, person_2, person_3]

for person in people:
    full_name = f"{person['first_name']} {person['last_name']}"
    print(f"Name: {full_name}")
    print(f"Alter: {person['age']}")
    print(f"Stadt: {person['city']}\n")

Ausgabe:

Name: Alice Smith
Alter: 25
Stadt: Hamburg

Name: Bob Jones
Alter: 30
Stadt: Berlin

Name: Charlie Brown
Alter: 22
Stadt: München

💡 Lösung 6-8

# 6-8: Haustiere
pet_1 = {'name': 'willie', 'kind': 'dog', 'owner': 'alice'}
pet_2 = {'name': 'fluffy', 'kind': 'cat', 'owner': 'bob'}
pet_3 = {'name': 'tweety', 'kind': 'bird', 'owner': 'charlie'}

pets = [pet_1, pet_2, pet_3]

for pet in pets:
    print(f"{pet['name']} ist ein {pet['kind']} und gehört {pet['owner']}.")

Ausgabe:

willie ist ein dog und gehört alice.
fluffy ist ein cat und gehört bob.
tweety ist ein bird und gehört charlie.

💡 Lösung 6-9

# 6-9: Lieblingsplätze
favorite_places = {
    'alice': ['paris', 'tokyo', 'new york'],
    'bob': ['london', 'rome'],
    'charlie': ['sydney', 'barcelona', 'amsterdam', 'prague']
}

for name, places in favorite_places.items():
    print(f"\n{name.title()}s Lieblingsplätze:")
    for place in places:
        print(f"\t- {place.title()}")

Ausgabe:


Alices Lieblingsplätze:
	- Paris
	- Tokyo
	- New York

Bobs Lieblingsplätze:
	- London
	- Rome

Charlies Lieblingsplätze:
	- Sydney
	- Barcelona
	- Amsterdam
	- Prague

💡 Lösung 6-10

# 6-10: Lieblingszahlen (mehrere)
favorite_numbers = {
    'alice': [7, 13, 21],
    'bob': [42, 8],
    'charlie': [3, 9, 15, 27]
}

for name, numbers in favorite_numbers.items():
    print(f"\n{name.title()}s Lieblingszahlen:")
    for number in numbers:
        print(f"\t{number}")

Ausgabe:


Alices Lieblingszahlen:
	7
	13
	21

Bobs Lieblingszahlen:
	42
	8

Charlies Lieblingszahlen:
	3
	9
	15
	27

💡 Lösung 6-11 (Teil 1)

# 6-11: Städte - Dictionary Definition
cities = {
    'hamburg': {
        'country': 'deutschland',
        'population': 1900000,
        'fact': 'Größter Hafen Deutschlands'
    },
    'paris': {
        'country': 'frankreich',
        'population': 2200000,
        'fact': 'Stadt der Liebe'
    },
    'tokyo': {
        'country': 'japan',
        'population': 14000000,
        'fact': 'Größte Metropolregion der Welt'
    }
}

💡 Lösung 6-11 (Teil 2)

# Dictionary durchlaufen und formatiert ausgeben
for city, info in cities.items():
    print(f"\n{city.title()}:")
    print(f"\tLand: {info['country'].title()}")
    print(f"\tBevölkerung: {info['population']:,}")
    print(f"\tFakt: {info['fact']}")

Ausgabe:

Hamburg:
	Land: Deutschland
	Bevölkerung: 1,900,000
	Fakt: Größter Hafen Deutschlands

Paris:
	Land: Frankreich
	Bevölkerung: 2,200,000
	Fakt: Stadt der Liebe

Tokyo:
	Land: Japan
	Bevölkerung: 14,000,000
	Fakt: Größte Metropolregion der Welt

💡 Lösung 6-12

# 6-12: Erweiterungen
# Erweiterung von vorherigen Übungen
print("Aufgabe 6-12: Erweiterungen bereits in den vorherigen Aufgaben umgesetzt.")

Ausgabe:

Aufgabe 6-12: Erweiterungen bereits in den vorherigen Aufgaben umgesetzt.

Zusammenfassung Kapitel 6

  • Dictionaries: Schlüssel-Wert-Paare
  • Zugriff: dict['key'] oder dict.get('key')
  • Durchlaufen: items(), keys(), values()
  • Verschachtelt: Listen in Dicts, Dicts in Listen
  • Methoden: set() für eindeutige Werte
  • Sortierung: sorted() für geordnete Ausgabe

Praktische Tipps

  • get(): Sichere Alternative zu dict['key']
  • Eindeutige Werte: set(dict.values())
  • Sortierte Ausgabe: sorted(dict.keys())
  • Verschachtelung: Für komplexe Datenstrukturen
# Gut
age = person.get('age', 0)
for name in sorted(people.keys()):
    print(name)

# Vermeiden
age = person['age']  # KeyError möglich