Wyjaśnienie lekcji
Po tej lekcji będziesz potrafić:
Wybór struktury danych jest decyzją projektową. Użyj listy, gdy liczą się kolejność i powtarzające się wartości; krotki dla stałego rekordu; zbioru dla unikalności i przynależności; a słownika dla wyszukiwania według klucza.
Sam zbiór nie jest wynikiem uporządkowanym. Gdy chcesz pierwsze wystąpienie każdego elementu w jego oryginalnej kolejności, użyj zbioru, aby zapamiętać, co już wystąpiło, oraz listy, aby zbierać wyniki. Łączy to mocne strony obu struktur.
Możesz też łączyć kolekcje: przejdź po liście rekordów, użyj słownika do wyszukania szczegółów według klucza i dodaj jeden przekształcony wynik do nowej listy. W raporcie wieloetapowym rozdziel pracę na normalizację, walidację, zliczanie i prezentację. Pisząc funkcję wielokrotnego użytku, zwróć gotowe dane.
Nie jest tu potrzebna żadna nowa zaawansowana składnia Pythona. Wyzwaniem jest wybranie właściwej reprezentacji i połączenie technik z tej jednostki oraz z Podstaw Pythona dla programistów.
steps = ["build", "test", "build"]
release = ("v3", "eu")
tags = {"api", "worker", "api"}
ports = {"api": 8080, "worker": 9000}
print(len(steps))
print(release[0])
print(len(tags))
print(ports["worker"])Wynik:
3
v3
2
9000Każda kolekcja wyraża inną potrzebę: sekwencję, stały rekord, unikalność lub wyszukiwanie.
raw = ["api", "worker", "api", "cache"]
seen = set()
unique = []
for name in raw:
if name not in seen:
seen.add(name)
unique.append(name)
print(unique)Wynik:
['api', 'worker', 'cache']Lista zachowuje kolejność; zbiór pamięta, które nazwy zostały już dodane.
jobs = [{"name": "search"}, {"name": "backup"}]
owners = {"search": "Maya"}
labels = []
for job in jobs:
labels.append(f"{job['name']}: {owners.get(job['name'], 'unassigned')}")
print(labels)Wynik:
['search: Maya', 'backup: unassigned']Słownik zapewnia opcjonalne wyszukiwanie dla każdego rekordu.
results = [("api", "passed"), ("worker", "failed"), ("cache", "passed")]
counts = {"passed": 0, "failed": 0}
for service, state in results:
if state in counts:
counts[state] += 1
print(f"Passed: {counts['passed']}")
print(f"Failed: {counts['failed']}")Wynik:
Passed: 2
Failed: 1Stały słownik liczników zapewnia przewidywalne raportowanie nawet wtedy, gdy kategoria ma zero zdarzeń.
| Potrzeba | Struktura lub technika |
|---|---|
| Uporządkowane wartości, w tym powtórzenia | list |
| Rekord o stałym rozmiarze | tuple |
| Śledzenie unikalnej przynależności | set |
| Wyszukiwanie szczegółów według identyfikatora | dict |
| Uporządkowane unikalne wartości | Lista + zbiór razem |
| Opcjonalne powiązane dane | mapping.get(key, default) |
if mapping.get(key) do sprawdzania istnienia odrzuca poprawne wartości fałszywe.