Podstawy Pythona: słowniki, funkcje i JSON

Wprowadzenie
W poprzednim wpisie omówiliśmy różnicę między () a [], listy, krotki i podstawowe operacje na macierzach. Dziś czas na kolejny krok: słowniki, czyli najważniejszą strukturę danych do przechowywania par klucz-wartość, funkcje z elastyczną liczbą argumentów oraz format JSON, w którym prędzej czy później zapisze się każda konfiguracja czy odpowiedź z zewnętrznego źródła. Wciąż bez LLM-ów — najpierw fundamenty.
Słowniki — dane po nazwie, nie po pozycji
Lista i krotka odwołują się do elementów po indeksie (lista[0]). Słownik (dict) odwołuje się po kluczu:
| |
Przydatne metody, które warto znać od razu:
| |
| |
Słownik może też przechowywać listy, inne słowniki, w zasadzie cokolwiek — to podstawowa struktura, w którą naturalnie pakuje się większość danych ustrukturyzowanych.
Funkcje — argumenty domyślne, *args i **kwargs
Podstawowa funkcja w Pythonie wygląda tak:
| |
Czasem nie wiadomo z góry, ile argumentów funkcja dostanie. Do tego służą *args (dowolna liczba argumentów pozycyjnych, jako krotka) i **kwargs (dowolna liczba argumentów nazwanych, jako słownik):
| |
To bardzo częsty wzorzec w bibliotekach: funkcja przyjmuje **kwargs i przekazuje je dalej do innej funkcji, bez wypisywania każdego parametru z osobna.
JSON — słownik zapisany jako tekst
JSON to format tekstowy, który wygląda niemal identycznie jak słownik i lista w Pythonie — i to nieprzypadkowo, bo dane konfiguracyjne, odpowiedzi API czy zapisane ustawienia najczęściej mają właśnie taką postać:
| |
W Pythonie do pracy z JSON-em służy wbudowany moduł json:
| |
Cztery funkcje do zapamiętania: dumps/loads działają na tekście w pamięci, dump/load — na plikach. Nazwa z “s” na końcu (dumps, loads) to zawsze wersja “string”.
Podsumowanie
Słowniki, funkcje z elastyczną liczbą argumentów i format JSON to trzy klocki, bez których trudno się obejść nawet w najprostszym skrypcie — a szczególnie w takim, który będzie się komunikował z czymkolwiek na zewnątrz. W kolejnym wpisie z tej serii przejdziemy do pracy z plikami i obsługi błędów — a stąd już bardzo blisko do pierwszego skryptu wykorzystującego LlamaIndex.