Samouczek słownika Pythona: Metody, przykłady i typowe wzorce
Słowniki są wszędzie w Pythonie, od odpowiedzi JSON po konfigurację. Dowiedz się, jak je tworzyć, czytać i aktualizować, a następnie opanuj wzorce liczenia, grupowania i łączenia, które wykorzystasz w prawdziwych projektach.
- Słownik Pythona przechowuje pary klucz-wartość i bardzo szybko wyszukuje wartość według klucza.
- Użyj
get(), gdy może brakować klawisza, ponieważ nawiasy kwadratowe podnosząKeyError. - Klucze muszą umożliwiać mieszanie, np. ciągi znaków, liczby lub krotki. Listy nie mogą być kluczami.
copy()jest płytkie, więc zagnieżdżone dane pozostają współdzielone, chyba że użyjeszdeepcopy.
Jeśli lista jest rzędem ponumerowanych pól, Słownik Pythona jest zbiorem oznaczonych pól. Pytasz o to, czego chcesz, po nazwie, a nie po pozycji, dlatego słowniki znajdują się za danymi JSON, konfiguracją, pamięciami podręcznymi i dużą częścią samego Pythona.
Ten samouczek zaczyna się od podstaw i przechodzi do wzorców, z których korzystają doświadczeni programiści na co dzień. Wszystkie przykłady uruchomiliśmy w Pythonie 3.13 i pokazane dane wyjściowe pochodzą z tego uruchomienia.
Co to jest słownik?
Słownik, czyli dict, odwzorowuje klucze na wartości. Każdy klucz pojawia się tylko raz, a wartościami mogą być dowolne wartości, łącznie z listami lub innymi słownikami.
| Wpisz | Dostęp przez | Zamówione | Duplikaty | Najlepsze dla |
|---|---|---|---|---|
lista |
Pozycja | Tak | Dozwolone | Sekwencje |
krotka |
Pozycja | Tak | Dozwolone | Stałe zapisy |
zestaw |
Tylko członkostwo | Nie | Niedozwolone | Unikalne przedmioty |
dykt |
Klucz | Zamówienie wstawiania | Klucze są wyjątkowe | Wyszukiwanie według nazwy |
Od wersji Python 3.7 słowniki oficjalnie zachowują kolejność wstawiania. Wiele starszych samouczków nadal nazywa je nieuporządkowanymi, co nie jest już prawdą. Aby uzyskać szersze porównanie innych typów, zobacz Lista Pythona vs Tuple vs Set.
Wyszukiwania są szybkie, ponieważ słowniki korzystają z tablicy mieszającej. Sprawdzanie klucza zajmuje mniej więcej tyle samo czasu, niezależnie od tego, czy słownik zawiera dziesięć czy milion pozycji, podczas gdy przeszukiwanie listy staje się wolniejsze w miarę jej powiększania się.
Utwórz słownik
user = {"name": "Asha", "age": 31, "city": "Pune"}
empty = {}
from_keywords = dict(name="Asha", age=31)
from_pairs = dict([("a", 1), ("b", 2)])
Najbardziej popularną formą są nawiasy klamrowe. Jedna pułapka: {} tworzy pusty słownik, a nie pusty zestaw. Do pustego zestawu potrzebujesz set().
Odczytuj wartości bezpiecznie
Istnieją dwa sposoby odczytania wartości, a różnica ma znaczenie, gdy klucz może nie istnieć:
user["name"] # 'Asha'
user["email"] # KeyError: 'email'
user.get("email") # None
user.get("email", "not set") # 'not set'
Jeśli klucz musi istnieć, użyj nawiasów kwadratowych, aby brakujący klawisz głośno zawiódł. Użyj get(), gdy nieobecność jest normalna, na przykład jako opcjonalne pole w odpowiedzi API. Aby sprawdzić klucz, użyj operatora in, który sprawdza klucze, a nie wartości:
"city" in user # True
"Pune" in user # False
Dodawaj, aktualizuj i usuwaj
Przypisanie do klucza aktualizuje go, jeśli istnieje, lub dodaje, jeśli nie:
user["age"] = 32
user["email"] = "asha@example.com"
print(user)
# {'name': 'Asha', 'age': 32, 'city': 'Pune', 'email': 'asha@example.com'}
Python oferuje kilka sposobów usuwania elementów:
user.pop("city") # returns 'Pune' and removes it
user.pop("phone", None) # no error if it is missing
del user["email"] # removes it, and raises KeyError if missing
user.clear() # empties the dictionary
Użyj pop(), jeśli chcesz odzyskać wartość. Przekazanie wartości domyślnej jako drugiego argumentu pozwala uniknąć błędu, gdy klucza nie ma. popitem() usuwa i zwraca ostatnio dodaną parę.
Zapętl się w słowniku
Bezpośrednie zapętlenie daje klucze. Aby uzyskać zarówno klucze, jak i wartości, użyj items():
user = {"name": "Asha", "age": 32}
for key, value in user.items():
print(key, "=", value)
# name = Asha
# age = 32
keys(), values() i items() zwracają widoki na żywo, a nie kopie, więc odzwierciedlają późniejsze zmiany. Nie dodawaj ani nie usuwaj kluczy podczas zapętlania słownika, ponieważ Python zgłasza RuntimeError. Zapętlaj list(user), jeśli musisz to zrobić.
Wskazówka: Sprawdzanie in słownika jest szybkie, ale "Pune" in user.values() musi skanować każdą wartość. Jeśli robisz to często w przypadku dużych danych, słownik może być wprowadzony w niewłaściwy sposób.
Ściągawka metod słownikowych
| Metoda | Co to robi |
|---|---|
get(k, domyślnie) |
Zwraca wartość lub wartość domyślną, jeśli brakuje klucza |
keys() |
Zwraca widok kluczy |
values() |
Zwraca widok wartości |
items() |
Zwraca widok par klucz-wartość |
update(other) |
Dodaje lub nadpisuje z innego słownika |
pop(k, domyślnie) |
Usuwa klucz i zwraca jego wartość |
popitem() |
Usuwa i zwraca ostatnio dodaną parę |
ustawdomyślnie(k, v) |
Zwraca wartość i najpierw wstawia v, jeśli brakuje klucza |
copy() |
Zwraca płytką kopię |
clear() |
Usuwa wszystko |
dykt.z kluczy (klawisze, v) |
Tworzy słownik na podstawie listy kluczy |
Połącz słowniki
Częstą potrzebą jest zastosowanie ustawień użytkownika zamiast ustawień domyślnych. Gdy klucze się zderzają, wygrywa prawa strona:
defaults = {"theme": "light", "lang": "en"}
saved = {"theme": "dark"}
defaults | saved
{**defaults, **saved}
# Both give: {'theme': 'dark', 'lang': 'en'}
Operator | wymaga Pythona 3.9 lub nowszego, natomiast wersja ** działa także na starszych wersjach. Obydwa tworzą nowy słownik. Natomiast defaults.update(saved) i defaults |= saved zmieniają defaults w miejscu.
Rozumienia i sortowanie
Rozwiązania słownikowe tworzą nowy słownik w jednym czytelnym wierszu, tak jak zrozumienia listowe robią to w przypadku list:
prices = {"pen": 10, "book": 250, "bag": 900}
{k: v for k, v in prices.items() if v > 100}
# {'book': 250, 'bag': 900}
Aby posortować według wartości, przekaż funkcję key do sorted(). Aby znaleźć klucz o największej wartości, użyj max():
sorted(prices.items(), key=lambda item: item[1], reverse=True)
# [('bag', 900), ('book', 250), ('pen', 10)]
max(prices, key=prices.get)
# 'bag'
Słownik nie ma metody sort(), a sorted() zwraca listę par. Zawiń wynik w dict(), jeśli chcesz mieć słownik w tej kolejności.
Wzory liczenia i grupowania
Ciągle pojawiają się dwa zadania. Pierwszym z nich jest liczenie, które można wykonać za pomocą get() z wartością domyślną wynoszącą zero:
words = "to be or not to be".split()
counts = {}
for word in words:
counts[word] = counts.get(word, 0) + 1
print(counts)
# {'to': 2, 'be': 2, 'or': 1, 'not': 1}
Biblioteka standardowa sprawia, że jest to jeszcze krótsze dzięki Counter:
from collections import Counter
Counter(words).most_common(2)
# [('to', 2), ('be', 2)]
Drugie to grupowanie, a defaultdict jest tutaj idealne, ponieważ tworzy dla Ciebie brakującą wartość:
from collections import defaultdict
orders = [("Asha", 1200), ("Ben", 300), ("Asha", 800)]
by_customer = defaultdict(list)
for name, total in orders:
by_customer[name].append(total)
print(dict(by_customer))
# {'Asha': [1200, 800], 'Ben': [300]}
Bez tego przed dodaniem musiałbyś sprawdzić, czy każdy klucz istnieje. Te same wzorce dobrze sprawdzają się w przypadku agregowania danych API lub wierszy dziennika. Gdy słownik jest pusty lub brakuje klucza, nasz przewodnik po obsłudze wyjątków w Pythonie pokazuje, jak sobie poradzić z wynikowym KeyError.
Zagnieżdżone dane i pułapka kopiowania
JSON mapuje bezpośrednio do zagnieżdżonych słowników i list, więc często będziesz łączyć klucze. Łańcuch get() zapewnia bezpieczeństwo, gdy może brakować poziomu:
response = {"user": {"profile": {"city": "Pune"}}}
response["user"]["profile"]["city"] # 'Pune'
response.get("user", {}).get("settings", {}).get("theme") # None
Zachowaj ostrożność podczas kopiowania zagnieżdżonych danych. copy() duplikuje tylko najwyższy poziom, więc słowniki wewnętrzne pozostają współdzielone z oryginałem:
settings = {"db": {"host": "localhost"}}
shallow = settings.copy()
shallow["db"]["host"] = "prod"
print(settings["db"]["host"])
# prod
Zmiana kopii spowodowała zmianę oryginału, co może być nieprzyjemnym błędem. Użyj copy.deepcopy(settings), aby uzyskać w pełni niezależną kopię.
Co może być kluczem słownika?
Klucze muszą być hashowalne, co ogólnie oznacza niezmienne. Wszystkie ciągi, liczby i krotki niezmiennych wartości działają. Listy i słowniki nie:
{["a"]: 1}
# TypeError: unhashable type: 'list'
Powodem jest to, że skrót klucza decyduje o tym, gdzie przechowywana jest jego wartość. Gdyby klucz mógł się zmienić, Python nie byłby już w stanie go znaleźć. Jeśli potrzebujesz klucza złożonego, użyj krotki, takiej jak {("Pune", 2026): 120}.
Typowe błędy
- Używanie nawiasów kwadratowych w przypadku klawiszy opcjonalnych. Sięgnij po
get(), gdy klawisza może nie być. - Zakładając, że
get()oznacza, że klucz istnieje.Nonemoże oznaczać brak klucza lub zapisanyNone. Użyjin, gdy różnica ma znaczenie. - Używanie modyfikowalnych wartości domyślnych.
dict.fromkeys(names, [])daje każdemu kluczowi tę samą listę. Zamiast tego użyj zrozumienia. - Zmiana rozmiaru podczas iteracji. Przejrzyj kopię kluczy w pętli.
- Używanie dyktanda dla stałych, znanych pól. Znak
dataclassmoże być bardziej przejrzysty i wychwytuje literówki w nazwach pól.
Podsumowanie
Słowniki nagradzają trochę praktyki. Zapamiętaj get() dla klawiszy opcjonalnych, items() dla pętli oraz Counter i defaultdict dla dwóch najpopularniejszych zadań. Aby poćwiczyć, weź mały plik JSON i napisz kod, aby zliczyć i pogrupować jego rekordy. Jeśli dopiero zaczynasz przygodę z tym językiem, zacznij od naszego samouczka Pythona dla początkujących.
Najczęstsze pytania
Co to jest słownik w Pythonie?
Słownik to wbudowana kolekcja przechowująca pary kluczy i wartości. Wyszukujesz wartość po kluczu, co jest szybkie nawet przy dużej ilości danych.
Czy słowniki Pythona są uporządkowane?
Tak. Od wersji Python 3.7 słowniki gwarantują zachowanie kolejności wstawiania kluczy. Aktualizacja istniejącego klucza nie powoduje zmiany jego pozycji.
Jaka jest różnica między get() a nawiasami kwadratowymi?
Nawiasy kwadratowe zgłaszają błąd KeyError, gdy brakuje klucza. get() zwraca None lub wartość domyślną, którą podasz, więc pasuje do kluczy opcjonalnych.
Czy słownik może mieć zduplikowane klucze?
Nie. Każdy klucz jest niepowtarzalny. Przypisanie do istniejącego klucza zastępuje jego wartość, a jeśli literał powtarza klucz, wygrywa ostatnia wartość.
Jak połączyć dwa słowniki w Pythonie?
Użyj | b w Pythonie 3.9 lub nowszym lub {**a, **b} w starszych wersjach. Obydwa tworzą nowy słownik, a wartości z b wygrywają, gdy klucze się zderzają.
Ucz się dalej
Potrzebujesz pomocy przy testowaniu, WordPressie lub SEO?
Pomagamy zespołom dostarczać lepsze oprogramowanie i rozwijać ich witryny. Powiedz nam, nad czym pracujesz, a my zaproponujemy jasny następny krok.
Więcej poradników na testowanie, sztuczna inteligencja i nowoczesny rozwój
Podobał Ci się ten artykuł? Wybierz temat i przejdź bezpośrednio do naszych najnowszych tutoriali.
Wyjaśnienie halucynacji AI: dlaczego modele językowe tworzą rzeczy i jak je zmniejszyć
Wyjaśniono halucynacje AI: czym są, dlaczego powstają w modelach językowych, typowe typy, jak je zredukować za pomocą uziemień i podpowiedzi oraz pr…
Przeczytaj artykuł →DevOpsWyjaśnienie zmiennych środowiskowych: pliki .env, sekrety i konfiguracja wykonana prawidłowo
Zmienne środowiskowe wyjaśnione na przykładach Pythona, które przeprowadziliśmy: ich odczytywanie i ustawianie, dlaczego każda wartość jest ciągiem …
Przeczytaj artykuł →Tworzenie oprogramowaniaWyjaśnienie ograniczenia szybkości interfejsu API: algorytmy, nagłówki i obsługa błędów 429
Ograniczanie szybkości API wyjaśnione za pomocą przeprowadzonej przez nas symulacji: zasobnik tokenów, stałe okno, przesuwane okno, 429 odpowiedzi, …
Przeczytaj artykuł →Automatyzacja testówWyśmiewanie w Pythonie: unittest.mock, patch i błędy, które sprawiają, że testy kłamią
Wyśmiewanie w Pythonie za pomocą unittest.mock, przetestowane: Mock i zwracana wartość, efekt uboczny, łatanie tam, gdzie używana jest nazwa, specyf…
Przeczytaj artykuł →Testowanie oprogramowaniaWyjaśnienie zasięgu kodu: pokrycie linii i oddziału oraz co naprawdę oznacza 100%
Wyjaśnienie pokrycia kodu za pomocą prawdziwego pliku cover.py: pokrycie linii, gałęzi i warunków, przeczytanie raportu, dlaczego 100% pokrycia może…
Przeczytaj artykuł →Bazy danych i SQLDELETE vs TRUNCATE vs DROP w SQL: różnice, wycofywanie i kiedy używać każdego z nich
DELETE vs TRUNCATE vs DROP wyjaśnione za pomocą przetestowanego SQL: co każdy usuwa, wycofywanie, wyzwalacze, resetowanie tożsamości, prędkość i czy…
Przeczytaj artykuł →Bazy danych i SQLWyjaśnienie widoków SQL: tworzenie, używanie i unikanie pułapek wraz z przykładami
Widoki SQL wyjaśnione za pomocą zapytań, które uruchomiliśmy: tworzenie widoku, wyniki na żywo, ukrywanie kolumn, wydajność, widoki z możliwością ak…
Przeczytaj artykuł →Tworzenie oprogramowaniaInterfejs TypeScript a typ: rzeczywiste różnice, testowane za pomocą kompilatora
Interfejs TypeScript a typ, sprawdzony z prawdziwym kompilatorem: co oba mogą zrobić, co tylko jeden, łączenie deklaracji, rozszerzenia a przecięcia…
Przeczytaj artykuł →Tworzenie oprogramowaniaPython *args i **kwargs wyjaśnione: elastyczne funkcje z przejrzystymi przykładami
Python *args i **kwargs wyjaśnione za pomocą uruchomionego przez nas kodu: pakowanie i rozpakowywanie, kolejność parametrów, argumenty zawierające t…
Przeczytaj artykuł →Tworzenie oprogramowaniaFunkcje Lambda w Pythonie: składnia, rzeczywiste zastosowania i kiedy ich nie używać
Funkcje lambda w Pythonie wyjaśnione za pomocą uruchomionego przez nas kodu: składnia, sortowanie za pomocą klucza, mapa i filtr, domknięcia, pułapk…
Przeczytaj artykuł →Sztuczna inteligencjaKim są agenci AI? Jak one działają, dzięki prostej pętli agenta, którą możesz uruchomić
Kim są agenci AI? Prosty przewodnik po pętli agenta, narzędziach, pamięci i poręczach, z małą pętlą w Pythonie, którą uruchomiliśmy, prawdziwymi zag…
Przeczytaj artykuł →DevOpsMonitorowanie a obserwowalność: prawdziwa różnica z logami, wskaźnikami i śladami
Wyjaśnienie monitorowania a obserwowalności: znane i nieznane awarie, dzienniki, metryki i ślady, opis incydentu przy kasie, złote sygnały, OpenTele…
Przeczytaj artykuł →DevOpsWoluminy platformy Docker a mocowania powiązań: utrwalanie danych kontenera we właściwy sposób
Wyjaśniono woluminy Dockera a montowanie powiązań: dlaczego dane kontenera znikają, nazwane woluminy, montowanie powiązań, tmpfs, przykłady tworzeni…
Przeczytaj artykuł →Automatyzacja testówTDD vs BDD: kluczowe różnice, jedna funkcja zbudowana w obie strony i kiedy używać każdej z nich
TDD vs BDD wyjaśnione za pomocą jednej funkcji rabatowej zbudowanej w obie strony: refaktoryzacja czerwono-zielona z uruchomionym przez nas kodem, s…
Przeczytaj artykuł →Testowanie oprogramowaniaTestowanie akceptacyjne użytkownika (UAT): proces, lista kontrolna i rzeczywiste przykłady
Wyjaśniono testy akceptacyjne użytkownika: kto je przeprowadza, czym różni się od kontroli jakości, siedmioetapowy proces, szablon przypadku testowe…
Przeczytaj artykuł →Bazy danych i SQLWyjaśnienie wartości SQL NULL: IS NULL, COALESCE, NULLIF i pułapki, których należy unikać
Wartości SQL NULL wyjaśnione za pomocą zapytań, które wykonaliśmy: logika trójwartościowa, IS NULL, COALESCE, NULLIF, w jaki sposób agregacje, łącze…
Przeczytaj artykuł →Bazy danych i SQLInstrukcja SQL CASE WHEN: składnia, rzeczywiste przykłady i typowe błędy
SQL CASE WHEN wyjaśnione za pomocą zapytań, które uruchomiliśmy: proste i przeszukiwane formularze, kolejność warunków, elementy przestawne z SUM, s…
Przeczytaj artykuł →Tworzenie oprogramowaniaCo to jest JWT? Tokeny internetowe JSON wyjaśnione na przykładzie działania
Co to jest JWT? Wyjaśniono tokeny sieciowe JSON: trzy części, token zbudowany i zmodyfikowany w uruchomionym przez nas kodzie, JWT a sesje, pamięć m…
Przeczytaj artykuł →Tworzenie oprogramowaniaWyjaśnienie pętli zdarzeń JavaScript: stos wywołań, mikrozadania i liczniki czasu z przykładami
Pętla zdarzeń JavaScript wyjaśniona za pomocą uruchomionego przez nas kodu: stos wywołań, kolejki zadań i mikrozadań, dlaczego setTimeout 0 nie jest…
Przeczytaj artykuł →Tworzenie oprogramowaniaWyjaśnienie generatorów Pythona i wydajności: oszczędzaj pamięć dzięki prawdziwym przykładom
Generatory Pythona i wydajność wyjaśnione za pomocą uruchomionego przez nas kodu: sposób wstrzymywania i wznawiania, mierzone oszczędności pamięci, …
Przeczytaj artykuł →Sztuczna inteligencjaCzym są osady? Wyjaśnienie wektorów i podobieństwa cosinusa
Czym są osadzania? Prosty przewodnik po wektorach, podobieństwie cosinusów i wyszukiwaniu semantycznym, z małym przykładem, który przeprowadziliśmy,…
Przeczytaj artykuł →DevOpsWdrożenie niebiesko-zielone a kanaryjskie: różnice, kompromisy i sposób wyboru
Wyjaśniono wdrożenie Blue-Green vs Canary: sposób działania każdego z nich, koszty, ryzyko i wycofywanie zmian, przetestowane przez nas stabilne łąc…
Przeczytaj artykuł →Automatyzacja testówNiestabilne testy: co je powoduje i jak je naprawić na dobre
Niestabilne testy wyjaśnione w przeprowadzonych przez nas demonstracjach: główne przyczyny, sposób potwierdzenia i zdiagnozowania jednej z nich, odp…
Przeczytaj artykuł →Testowanie oprogramowaniaLoad Testing vs Stress Testing: Differences, Metrics and k6 Examples
Wyjaśniono testy obciążenia i testy warunków skrajnych: co dowodzi każdy z nich, testy szczytowe i nasiąkania, istotne metryki, dlaczego średnie wpr…
Przeczytaj artykuł →Testowanie oprogramowaniaPrzypadek testowy a scenariusz testowy: kluczowe różnice, przykłady i kiedy stosować każdy z nich
Wyjaśnienie przypadków testowych i scenariuszy testowych: jasne definicje, tabela obok siebie, jedna funkcja resetowania hasła zaczerpnięta ze scena…
Przeczytaj artykuł →Bazy danych i SQLOptymalizacja zapytań SQL: czytaj plany wykonania i napraw powolne zapytania z synchronizacją
Optymalizacja zapytań SQL przetestowana na milionie wierszy: przeczytaj plany wykonania, dodaj odpowiednie indeksy, napraw filtry niesargowalne, uży…
Przeczytaj artykuł →Bazy danych i SQLSQL UNION vs UNION ALL: różnice, przykłady i testowana wydajność
SQL UNION vs UNION ALL wyjaśnione na podstawie zapytań, które uruchomiliśmy: duplikaty, obie reguły są zgodne, prawdziwy błąd danych, zmierzona wyda…
Przeczytaj artykuł →Tworzenie oprogramowaniaSamouczek API pobierania JavaScript: GET, POST, obsługa błędów i limity czasu
Samouczek JavaScript Fetch API testowany na serwerze lokalnym: GET i POST, dlaczego 404 nie rzuca, pomocnik wielokrotnego użytku, ciągi zapytań, prz…
Przeczytaj artykuł →Tworzenie oprogramowaniaObsługa plików w Pythonie: odczyt, zapis, CSV, JSON i pathlib z przykładami
Obsługa plików w Pythonie wyjaśniona za pomocą uruchomionego przez nas kodu: tryby otwarte, czytanie dużych plików, CSV, JSON, pathlib, pliki binarn…
Przeczytaj artykuł →Tworzenie oprogramowaniaKlasy i obiekty Pythona: samouczek OOP z prawdziwymi przykładami
Klasy i obiekty Pythona objaśnione za pomocą uruchomionego przez nas kodu: __init__, metody, atrybuty klas i instancji, dziedziczenie, właściwości, …
Przeczytaj artykuł →Sztuczna inteligencjaCo to jest model dużego języka? Jak działają LLM, wyjaśnione bez szumu
Co to jest model dużego języka? LLM wyjaśnione prostym językiem: tokeny, osadzanie, uwaga, szkolenie, temperatura i okna kontekstowe, mała demonstra…
Przeczytaj artykuł →DevOpsPolecenia systemu Linux dla początkujących: niezbędny przewodnik po terminalu z przykładami
Polecenia systemu Linux dla początkujących, pogrupowane według zadań: nawigacja, pliki, przeglądanie logów, grep, potoki, uprawnienia, procesy i arc…
Przeczytaj artykuł →Automatyzacja testówSelenium kontra dramaturg: kluczowe różnice, porównanie kodu i wybór
Porównanie Selenium i Playwright: architektura, oczekiwanie, obsługa przeglądarki i języka, debugowanie, ten sam test w obu narzędziach, porady doty…
Przeczytaj artykuł →Testowanie oprogramowaniaPartycjonowanie równoważne: technika projektowania testów wyjaśniona na praktycznych przykładach
Wyjaśniono podział równoważny: jak znaleźć prawidłowe i nieprawidłowe partycje, sprawdzone przykłady dla grup wiekowych, hasła i kupony, przeprowadz…
Przeczytaj artykuł →Testowanie oprogramowaniaWażność a priorytet w testowaniu oprogramowania: różnice, macierz i rzeczywiste przykłady
Wyjaśniono ważność a priorytet w testowaniu oprogramowania: jasne definicje, czterokierunkowa macierz z przykładami, skale poziomów, kto ustawia każ…
Przeczytaj artykuł →Bazy danych i SQLSamouczek dotyczący podzapytań SQL: typy, skorelowane podzapytania i ISTNIEJĄ z przykładami
Samouczek dotyczący podzapytań SQL z zapytaniami, które wykonaliśmy: podzapytania skalarne, IN, FROM i SELECT, podzapytania skorelowane, EXISTS, puł…
Przeczytaj artykuł →Bazy danych i SQLWyjaśnienie transakcji SQL i ACID: COMMIT, ROLLBACK i poziomy izolacji
Transakcje SQL i ACID wyjaśnione za pomocą wykonanego przez nas przelewu bankowego: COMMIT, ROLLBACK, punkty zapisu, blokady, poziomy izolacji, brud…
Przeczytaj artykuł →Tworzenie oprogramowaniaŚciągawka dotycząca poleceń Git: polecenia, których faktycznie używasz, z przykładami
Ściągawka poleceń Git pogrupowana według zadań: konfiguracja, przemieszczanie, gałęzie, piloty, skrytka, historia i cofanie błędów, z danymi wyjścio…
Przeczytaj artykuł →Tworzenie oprogramowaniaWyjaśnienie obietnic JavaScript: następnie catch, Promise.all i typowe błędy
Obietnice JavaScript wyjaśnione za pomocą uruchomionego przez nas kodu: stany, łańcuchy then i catch, obsługa błędów, Promise.all, allSettled, race …
Przeczytaj artykuł →Tworzenie oprogramowaniaSamouczek słownika języka Python: metody, przykłady i typowe wzorce
Samouczek słownika języka Python z uruchomionym przez nas kodem: tworzenie, odczytywanie i aktualizowanie słowników, metody kluczowych, łączenie, ro…
Przeczytaj artykuł →Sztuczna inteligencjaCo to jest RAG? Generacja rozszerzona o wyszukiwanie wyjaśniona na przykładzie roboczym
Co to jest RAG? Generowanie wspomagane pobieraniem wyjaśnione krok po kroku: indeksowanie, fragmentowanie, osadzanie, pobieranie, mały działający pr…
Przeczytaj artykuł →DevOpsSamouczek Terraform dla początkujących: Infrastruktura jako kod od pierwszego pliku do modułów
Samouczek Terraform dla początkujących: zacznij bez konta w chmurze, naucz się inicjowania, planowania i stosowania, a następnie zmiennych, wyników,…
Przeczytaj artykuł →DevOpsDocker kontra Kubernetes: kluczowe różnice, jak ze sobą współpracują i czego potrzebujesz
Wyjaśniono Docker vs Kubernetes: co robi każdy z nich, ta sama aplikacja działa z obydwoma, porównanie Docker Compose i Swarm, zmiana podkładki dock…
Przeczytaj artykuł →Automatyzacja testówSamouczek Pytest dla początkujących: urządzenia, parametryzacja i prawdziwe przykłady
Samouczek pytest dla początkujących z testami, które przeprowadziliśmy na pytest 9.2: asercje, urządzenia, parametryzacja, conftest, znaczniki, tmp_…
Przeczytaj artykuł →Testowanie oprogramowaniaCykl życia testowania oprogramowania (STLC): 6 faz, kryteria wejścia i wyjścia, przykład
Wyjaśniono cykl życia testowania oprogramowania: sześć faz STLC z kryteriami wejścia i wyjścia, elementy dostarczane, działający przykład funkcji lo…
Przeczytaj artykuł →Tworzenie oprogramowaniaGit merge vs rebase: różnice, przykłady i kiedy czego używać
Git merge vs rebase wyjaśnione na prawdziwym wyniku logu, z tabelą porównawczą, złotą zasadą rebase i bezpiecznym procesem pracy zespołu.
Przeczytaj artykuł →Tworzenie oprogramowaniaPython list comprehension: składnia, przykłady i kiedy jej unikać
Python list comprehension wyjaśnione: składnia, filtrowanie, if-else, zagnieżdżone pętle, zmierzone czasy i sytuacje, w których zwykła pętla for jes…
Przeczytaj artykuł →Bazy danych i SQLSQL JOIN – wyjaśnienie z przykładami (Inner, Left, Right, Full)
Zrozum złączenia SQL krok po kroku na przykładowych tabelach i zapytaniach: INNER, LEFT, RIGHT, FULL, CROSS i SELF, plus typowe błędy i wskazówki wy…
Przeczytaj artykuł →