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 6-1

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 favorite number is {number}.")

📄 Ausgabe 6-2

Alice's favorite number is 7.
Bob's favorite number is 42.
Charlie's favorite number is 13.
Diana's favorite number is 3.
Eve's favorite number is 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 6-3

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 6-4 (Teil 1)

Variable:
	Ein Container für einen Wert

List:
	Eine Sammlung von Elementen

Dictionary:
	Schlüssel-Wert-Paare

Function:
	Ein benannter Codeblock

📄 Ausgabe 6-4 (Teil 2)

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"The {river.title()} runs through {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 6-5

The Nil runs through Ägypten.
The Mississippi runs through Vereinigte Staaten.
The Fraser runs through Kanada.
The Kuskokwim runs through Alaska.
The Yangtze runs through 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"Thank you for participating, {name.title()}!")
    else:
        print(f"{name.title()}, please take our poll!")

📄 Ausgabe 6-6

Thank you for participating, Jen!
Thank you for participating, Sarah!
Thank you for participating, Edward!
Thank you for participating, Phil!
Alice, please take our poll!
Bob, please take our poll!

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 6-7

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']} is a {pet['kind']} owned by {pet['owner']}.")

📄 Ausgabe 6-8

willie is a dog owned by alice.
fluffy is a cat owned by bob.
tweety is a bird owned by 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 favorite places:")
    for place in places:
        print(f"\t- {place.title()}")

📄 Ausgabe 6-9


Alice's favorite places:
	- Paris
	- Tokyo
	- New York

Bob's favorite places:
	- London
	- Rome

Charlie's favorite places:
	- 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 favorite numbers:")
    for number in numbers:
        print(f"\t{number}")

📄 Ausgabe 6-10


Alice's favorite numbers:
	7
	13
	21

Bob's favorite numbers:
	42
	8

Charlie's favorite numbers:
	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 6-11 (Teil 1)

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

📄 Ausgabe 6-11 (Teil 2)

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 6-12

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