{"id":1348,"date":"2026-04-20T12:44:10","date_gmt":"2026-04-20T10:44:10","guid":{"rendered":"https:\/\/trzykody.pl\/?p=1348"},"modified":"2026-04-20T13:45:08","modified_gmt":"2026-04-20T11:45:08","slug":"slownik-python","status":"publish","type":"post","link":"https:\/\/trzykody.pl\/index.php\/2026\/04\/20\/slownik-python\/","title":{"rendered":"S\u0142ownik Python \u2013 najwa\u017cniejsze poj\u0119cia i definicje dla pocz\u0105tkuj\u0105cych"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Praca z danymi bardzo szybko pokazuje, \u017ce same zmienne i listy przestaj\u0105 wystarcza\u0107. Gdy trzeba powi\u0105za\u0107 konkretn\u0105 warto\u015b\u0107 z nazw\u0105, identyfikatorem, adresem e-mail, numerem produktu albo statusem zam\u00f3wienia, potrzebna jest struktura oparta nie na pozycji elementu, ale na kluczu. Dzi\u0119ki temu odczyt danych jest szybszy, kod czytelniejszy i \u0142atwiej unikn\u0105\u0107 b\u0142\u0119d\u00f3w zwi\u0105zanych z indeksami. Najwygodniejszym punktem startu do zrozumienia pracy z danymi w Pythonie pozostaje <strong>S\u0142ownik Python<\/strong>.<\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Spis Tre\u015bci<\/h2><nav><ol><li><a href=\"#slownik-python-jako-struktura-mapujaca-klucze-na-wartosci-i-roznica-wzgledem-listy\">S\u0142ownik Python jako struktura mapuj\u0105ca klucze na warto\u015bci i r\u00f3\u017cnica wzgl\u0119dem listy<\/a><ol><li><a href=\"#podstawowa-skladnia-tworzenia-i-odczytu-danych\">Podstawowa sk\u0142adnia tworzenia i odczytu danych<\/a><\/li><li><a href=\"#odpowiednik-idei-w-c-i-c\">Odpowiednik idei w C++ i C<\/a><\/li><\/ol><\/li><li><a href=\"#najwazniejsze-operacje-ktore-wykonuje-sie-codziennie-podczas-pracy-ze-struktura-slownik-python\">Najwa\u017cniejsze operacje, kt\u00f3re wykonuje si\u0119 codziennie podczas pracy ze struktur\u0105 S\u0142ownik Python<\/a><ol><li><a href=\"#dostep-przez-nawiasy-kwadratowe-i-problem-key-error\">Dost\u0119p przez nawiasy kwadratowe i problem KeyError<\/a><\/li><li><a href=\"#iteracja-po-kluczach-wartosciach-i-parach\">Iteracja po kluczach, warto\u015bciach i parach<\/a><\/li><li><a href=\"#usuwanie-elementow-i-kontrola-istnienia-klucza\">Usuwanie element\u00f3w i kontrola istnienia klucza<\/a><\/li><li><a href=\"#zlozonosc-czasowa-i-dlaczego-slownik-jest-szybki\">Z\u0142o\u017cono\u015b\u0107 czasowa i dlaczego s\u0142ownik jest szybki<\/a><\/li><li><a href=\"#uproszczony-model-dzialania-funkcji-hash\">Uproszczony model dzia\u0142ania funkcji hash<\/a><\/li><\/ol><\/li><li><a href=\"#pulapki-wydajnosciowe-dobre-praktyki-i-sytuacje-w-ktorych-slownik-python-nie-jest-najlepszym-wyborem\">Pu\u0142apki wydajno\u015bciowe, dobre praktyki i sytuacje, w kt\u00f3rych S\u0142ownik Python nie jest najlepszym wyborem<\/a><ol><li><a href=\"#duplikaty-kluczy-nie-istnieja\">Duplikaty kluczy nie istniej\u0105<\/a><\/li><li><a href=\"#zagniezdzone-slowniki-i-czytelnosc-kodu\">Zagnie\u017cd\u017cone s\u0142owniki i czytelno\u015b\u0107 kodu<\/a><\/li><li><a href=\"#liczenie-czestosci-wystepowania-danych\">Liczenie cz\u0119sto\u015bci wyst\u0119powania danych<\/a><\/li><li><a href=\"#wzor-logiczny-licznika\">Wz\u00f3r logiczny licznika<\/a><\/li><\/ol><\/li><li><a href=\"#przyklady-praktyczne-z-codziennej-pracy-programisty-i-administratora-danych\">Przyk\u0142ady praktyczne z codziennej pracy programisty i administratora danych<\/a><\/li><li><a href=\"#faq-dotyczace-pracy-ze-slownikami-w-pythonie-i-najczestszych-problemow-poczatkujacych\">FAQ dotycz\u0105ce pracy ze s\u0142ownikami w Pythonie i najcz\u0119stszych problem\u00f3w pocz\u0105tkuj\u0105cych<\/a><ol><li><a href=\"#czy-slownik-zachowuje-kolejnosc-elementow\">Czy s\u0142ownik zachowuje kolejno\u015b\u0107 element\u00f3w?<\/a><\/li><li><a href=\"#czy-klucz-moze-byc-liczba\">Czy klucz mo\u017ce by\u0107 liczb\u0105?<\/a><\/li><li><a href=\"#dlaczego-pojawia-sie-key-error\">Dlaczego pojawia si\u0119 KeyError?<\/a><\/li><li><a href=\"#kiedy-lepiej-uzyc-listy-zamiast-slownika\">Kiedy lepiej u\u017cy\u0107 listy zamiast s\u0142ownika?<\/a><\/li><li><a href=\"#czy-slownik-jest-szybszy-od-listy\">Czy s\u0142ownik jest szybszy od listy?<\/a><\/li><li><a href=\"#czy-mozna-sortowac-slownik\">Czy mo\u017cna sortowa\u0107 s\u0142ownik?<\/a><\/li><\/ol><\/li><\/ol><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"slownik-python-jako-struktura-mapujaca-klucze-na-wartosci-i-roznica-wzgledem-listy\">S\u0142ownik Python jako struktura mapuj\u0105ca klucze na warto\u015bci i r\u00f3\u017cnica wzgl\u0119dem listy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">S\u0142ownik (dictionary, <code>dict<\/code>) to wbudowana struktura danych oparta na parach <code>klucz: warto\u015b\u0107<\/code>. Zamiast pyta\u0107 program \u201eco jest na pozycji numer 3\u201d, pytamy \u201ejaka warto\u015b\u0107 jest przypisana do klucza <code>email<\/code>\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To fundamentalna r\u00f3\u017cnica wzgl\u0119dem listy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lista:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>zachowuje kolejno\u015b\u0107<\/li>\n\n\n\n<li>u\u017cywa indeks\u00f3w liczbowych<\/li>\n\n\n\n<li>dobrze nadaje si\u0119 do sekwencji danych<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">S\u0142ownik:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>u\u017cywa unikalnych kluczy<\/li>\n\n\n\n<li>pozwala szybko znale\u017a\u0107 warto\u015b\u0107 po nazwie<\/li>\n\n\n\n<li>dobrze nadaje si\u0119 do danych opisowych i konfiguracyjnych<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad praktyczny:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dla u\u017cytkownika systemu zamiast:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>indeks 0 = imi\u0119<\/li>\n\n\n\n<li>indeks 1 = nazwisko<\/li>\n\n\n\n<li>indeks 2 = wiek<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">bezpieczniej jest u\u017cy\u0107:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>\"imie\"<\/code> = Jan<\/li>\n\n\n\n<li><code>\"nazwisko\"<\/code> = Kowalski<\/li>\n\n\n\n<li><code>\"wiek\"<\/code> = 29<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">W kodzie oznacza to mniej pomy\u0142ek. Po miesi\u0105cu \u0142atwiej zrozumie\u0107 <code>uzytkownik[\"wiek\"]<\/code> ni\u017c <code>uzytkownik[2]<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Klucze musz\u0105 by\u0107 hashowalne, czyli niezmienne. Najcz\u0119\u015bciej u\u017cywa si\u0119:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>str<\/code><\/li>\n\n\n\n<li><code>int<\/code><\/li>\n\n\n\n<li><code>float<\/code><\/li>\n\n\n\n<li><code>tuple<\/code> (je\u015bli zawiera niezmienne elementy)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Nie u\u017cywa si\u0119 jako kluczy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>list<\/li>\n\n\n\n<li>innych s\u0142ownik\u00f3w<\/li>\n\n\n\n<li>zbior\u00f3w <code>set<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">bo s\u0105 mutowalne.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"podstawowa-skladnia-tworzenia-i-odczytu-danych\">Podstawowa sk\u0142adnia tworzenia i odczytu danych<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Operacja<\/th><th>Przyk\u0142ad kodu<\/th><\/tr><\/thead><tbody><tr><td>Utworzenie s\u0142ownika<\/td><td><code>python\\nstudent = {\\n \\\"imie\\\": \\\"Anna\\\",\\n \\\"wiek\\\": 21,\\n \\\"kierunek\\\": \\\"Informatyka\\\"\\n}\\n<\/code><\/td><\/tr><tr><td>Odczyt warto\u015bci<\/td><td><code>python\\nprint(student[\\\"imie\\\"])\\n<\/code><\/td><\/tr><tr><td>Zmiana warto\u015bci<\/td><td><code>python\\nstudent[\\\"wiek\\\"] = 22\\n<\/code><\/td><\/tr><tr><td>Dodanie nowego pola<\/td><td><code>python\\nstudent[\\\"rok\\\"] = 2\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"odpowiednik-idei-w-c-i-c\">Odpowiednik idei w C++ i C<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Python ma s\u0142ownik wbudowany, ale ta sama logika istnieje tak\u017ce w innych j\u0119zykach.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Przyk\u0142ad<\/th><\/tr><\/thead><tbody><tr><td>C++ (<code>unordered_map<\/code>)<\/td><td><code>cpp\\n#include &lt;iostream&gt;\\n#include &lt;unordered_map&gt;\\nusing namespace std;\\n\\nint main() {\\n unordered_map&lt;string, int&gt; wiek;\\n wiek[\\\"Anna\\\"] = 21;\\n cout &lt;&lt; wiek[\\\"Anna\\\"] &lt;&lt; endl;\\n return 0;\\n}\\n<\/code><\/td><\/tr><tr><td>C (prosta symulacja)<\/td><td><code>c\\n#include &lt;stdio.h&gt;\\n#include &lt;string.h&gt;\\n\\nstruct Student {\\n char klucz[20];\\n int wartosc;\\n};\\n\\nint main() {\\n struct Student s;\\n strcpy(s.klucz, \\\"wiek\\\");\\n s.wartosc = 21;\\n printf(\\\"%d\\\\n\\\", s.wartosc);\\n return 0;\\n}\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">C nie ma wbudowanego s\u0142ownika, wi\u0119c zwykle u\u017cywa si\u0119 w\u0142asnych struktur lub bibliotek z tablicami haszuj\u0105cymi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"najwazniejsze-operacje-ktore-wykonuje-sie-codziennie-podczas-pracy-ze-struktura-slownik-python\">Najwa\u017cniejsze operacje, kt\u00f3re wykonuje si\u0119 codziennie podczas pracy ze struktur\u0105 S\u0142ownik Python<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W praktyce nie chodzi o samo utworzenie s\u0142ownika, ale o bezpieczne pobieranie danych, iteracj\u0119 i kontrol\u0119 b\u0142\u0119d\u00f3w.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Najwi\u0119cej problem\u00f3w pocz\u0105tkuj\u0105cy maj\u0105 w\u0142a\u015bnie tutaj.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"dostep-przez-nawiasy-kwadratowe-i-problem-key-error\">Dost\u0119p przez nawiasy kwadratowe i problem <code>KeyError<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Kod:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">print(student[\"email\"])<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">zadzia\u0142a tylko wtedy, gdy klucz istnieje.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u015bli nie istnieje, Python zg\u0142osi:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">KeyError<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To cz\u0119sty b\u0142\u0105d w aplikacjach webowych, parserach JSON i automatyzacji plik\u00f3w.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bezpieczniejsze jest u\u017cycie <code>.get()<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Metoda<\/th><th>Przyk\u0142ad<\/th><\/tr><\/thead><tbody><tr><td>Ryzykowny odczyt<\/td><td><code>python\\nprint(student[\\\"email\\\"])\\n<\/code><\/td><\/tr><tr><td>Bezpieczny odczyt<\/td><td><code>python\\nprint(student.get(\\\"email\\\"))\\n<\/code><\/td><\/tr><tr><td>Warto\u015b\u0107 domy\u015blna<\/td><td><code>python\\nprint(student.get(\\\"email\\\", \\\"brak\\\"))\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To drobiazg, ale oszcz\u0119dza du\u017co czasu przy debugowaniu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"iteracja-po-kluczach-wartosciach-i-parach\">Iteracja po kluczach, warto\u015bciach i parach<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">S\u0142ownik mo\u017cna przegl\u0105da\u0107 na kilka sposob\u00f3w.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Cel<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Same klucze<\/td><td><code>python\\nfor k in student:\\n print(k)\\n<\/code><\/td><\/tr><tr><td>Same warto\u015bci<\/td><td><code>python\\nfor v in student.values():\\n print(v)\\n<\/code><\/td><\/tr><tr><td>Klucz i warto\u015b\u0107<\/td><td><code>python\\nfor k, v in student.items():\\n print(k, v)\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Najcz\u0119\u015bciej u\u017cywa si\u0119 <code>.items()<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kod jest wtedy czytelny i nie wymaga dodatkowego odwo\u0142ania <code>student[k]<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"usuwanie-elementow-i-kontrola-istnienia-klucza\">Usuwanie element\u00f3w i kontrola istnienia klucza<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Operacja<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Usuni\u0119cie przez <code>del<\/code><\/td><td><code>python\\ndel student[\\\"rok\\\"]\\n<\/code><\/td><\/tr><tr><td>Usuni\u0119cie przez <code>pop()<\/code><\/td><td><code>python\\nstudent.pop(\\\"rok\\\")\\n<\/code><\/td><\/tr><tr><td>Sprawdzenie klucza<\/td><td><code>python\\nif \\\"wiek\\\" in student:\\n print(\\\"istnieje\\\")\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><code>pop()<\/code> jest wygodniejsze, bo mo\u017ce zwr\u00f3ci\u0107 usuwan\u0105 warto\u015b\u0107.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"zlozonosc-czasowa-i-dlaczego-slownik-jest-szybki\">Z\u0142o\u017cono\u015b\u0107 czasowa i dlaczego s\u0142ownik jest szybki<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">W typowym przypadku:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>odczyt: O(1)<\/li>\n\n\n\n<li>zapis: O(1)<\/li>\n\n\n\n<li>usuni\u0119cie: O(1)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Lista dla wyszukiwania po warto\u015bci zwykle wymaga:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>O(n)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">To du\u017ca r\u00f3\u017cnica.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dla 10 element\u00f3w nie ma znaczenia. Dla 500 000 rekord\u00f3w ju\u017c bardzo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Powodem jest u\u017cycie tablicy haszuj\u0105cej.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"uproszczony-model-dzialania-funkcji-hash\">Uproszczony model dzia\u0142ania funkcji hash<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Etap<\/th><th>Opis<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td>Python oblicza hash klucza<\/td><\/tr><tr><td>2<\/td><td>Hash wskazuje miejsce w pami\u0119ci<\/td><\/tr><tr><td>3<\/td><td>Program trafia bezpo\u015brednio do warto\u015bci<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To w\u0142a\u015bnie daje szybko\u015b\u0107.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nie jest to magia, tylko dobra organizacja danych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"pulapki-wydajnosciowe-dobre-praktyki-i-sytuacje-w-ktorych-slownik-python-nie-jest-najlepszym-wyborem\">Pu\u0142apki wydajno\u015bciowe, dobre praktyki i sytuacje, w kt\u00f3rych S\u0142ownik Python nie jest najlepszym wyborem<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">S\u0142ownik jest bardzo wygodny, ale nie zawsze najlepszy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zbyt cz\u0119ste u\u017cywanie go \u201ebo jest uniwersalny\u201d te\u017c bywa b\u0142\u0119dem.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"duplikaty-kluczy-nie-istnieja\">Duplikaty kluczy nie istniej\u0105<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">To wa\u017cne.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kod:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Przyk\u0142ad<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Powielony klucz<\/td><td><code>python\\ndane = {\\n \\\"id\\\": 1,\\n \\\"id\\\": 2\\n}\\nprint(dane)\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">wynikiem b\u0119dzie:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{'id': 2}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Druga warto\u015b\u0107 nadpisuje pierwsz\u0105.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u015bli potrzebne s\u0105 wielokrotne warto\u015bci, lepiej u\u017cy\u0107:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>listy w s\u0142owniku<\/li>\n\n\n\n<li><code>defaultdict<\/code><\/li>\n\n\n\n<li>bazy danych<\/li>\n\n\n\n<li>struktury relacyjnej<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"zagniezdzone-slowniki-i-czytelnosc-kodu\">Zagnie\u017cd\u017cone s\u0142owniki i czytelno\u015b\u0107 kodu<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nfirma = {\\n \\\"pracownik\\\": {\\n \\\"imie\\\": \\\"Jan\\\",\\n \\\"adres\\\": {\\n \\\"miasto\\\": \\\"Warszawa\\\"\\n }\\n }\\n}\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Dost\u0119p:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">firma[\"pracownik\"][\"adres\"][\"miasto\"]<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Technicznie poprawne, ale po kilku poziomach zaczyna by\u0107 trudne w utrzymaniu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W wi\u0119kszych projektach cz\u0119sto lepiej przej\u015b\u0107 na:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>klasy<\/li>\n\n\n\n<li>dataclass<\/li>\n\n\n\n<li>Pydantic<\/li>\n\n\n\n<li>ORM<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">bo struktura staje si\u0119 przewidywalna.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"liczenie-czestosci-wystepowania-danych\">Liczenie cz\u0119sto\u015bci wyst\u0119powania danych<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">To bardzo cz\u0119sty przypadek.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Na przyk\u0142ad analiza log\u00f3w:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ile razy wyst\u0105pi\u0142 b\u0142\u0105d 404<\/li>\n\n\n\n<li>ile razy pojawi\u0142 si\u0119 u\u017cytkownik<\/li>\n\n\n\n<li>ile razy wyst\u0105pi\u0142o konkretne s\u0142owo<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\ntekst = [\\\"a\\\", \\\"b\\\", \\\"a\\\", \\\"c\\\", \\\"a\\\"]\\nlicznik = {}\\n\\nfor x in tekst:\\n licznik[x] = licznik.get(x, 0) + 1\\n\\nprint(licznik)\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To klasyczny wzorzec.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W praktyce spotyka si\u0119 go bardzo cz\u0119sto na rozmowach technicznych.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"wzor-logiczny-licznika\">Wz\u00f3r logiczny licznika<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Zastosowanie<\/th><th>Zapis<\/th><\/tr><\/thead><tbody><tr><td>Aktualizacja licznika<\/td><td><code>nowa_wartosc = stara_wartosc + 1<\/code><\/td><\/tr><tr><td>Wersja z warto\u015bci\u0105 domy\u015bln\u0105<\/td><td><code>dict.get(klucz, 0) + 1<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Niby proste, ale bez tego trudno pisa\u0107 sensowne przetwarzanie danych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"przyklady-praktyczne-z-codziennej-pracy-programisty-i-administratora-danych\">Przyk\u0142ady praktyczne z codziennej pracy programisty i administratora danych<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Najbardziej naturalne zastosowania:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/trzykody.pl\/index.php\/2026\/04\/01\/konfiguracje-aplikacji\/\">konfiguracje aplikacji<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/trzykody.pl\/index.php\/2026\/04\/05\/dane-z-api-w-formacie-json\/\">dane z API w formacie JSON<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/trzykody.pl\/index.php\/2026\/04\/08\/cache-wynikow\/\">cache wynik\u00f3w<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/trzykody.pl\/index.php\/2026\/04\/03\/mapowanie-identyfikatorow\/\">mapowanie identyfikator\u00f3w<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/trzykody.pl\/index.php\/2026\/04\/13\/liczniki-i-statystyki\/\">liczniki i statystyki<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/trzykody.pl\/index.php\/2026\/04\/14\/parametry-uzytkownika\/\">parametry u\u017cytkownika<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/trzykody.pl\/index.php\/2026\/04\/09\/slowniki-tlumaczen\/\">s\u0142owniki t\u0142umacze\u0144<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/trzykody.pl\/index.php\/2026\/04\/16\/walidacja-formularzy\/\">walidacja formularzy<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">JSON praktycznie jest bliskim odpowiednikiem s\u0142ownika.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>JSON \/ Python<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nzamowienie = {\\n \\\"id\\\": 150,\\n \\\"status\\\": \\\"oplacone\\\",\\n \\\"kwota\\\": 249.99\\n}\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Dlatego dobra znajomo\u015b\u0107 tej struktury jest obowi\u0105zkowa przy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>backendzie<\/li>\n\n\n\n<li>analizie danych<\/li>\n\n\n\n<li>automatyzacji<\/li>\n\n\n\n<li>DevOps<\/li>\n\n\n\n<li>testach API<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Bez tego szybko pojawia si\u0119 chaos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq-dotyczace-pracy-ze-slownikami-w-pythonie-i-najczestszych-problemow-poczatkujacych\">FAQ dotycz\u0105ce pracy ze s\u0142ownikami w Pythonie i najcz\u0119stszych problem\u00f3w pocz\u0105tkuj\u0105cych<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-slownik-zachowuje-kolejnosc-elementow\">Czy s\u0142ownik zachowuje kolejno\u015b\u0107 element\u00f3w?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Od Python 3.7 tak &#8211; kolejno\u015b\u0107 dodawania element\u00f3w jest zachowywana. W starszych wersjach nie nale\u017ca\u0142o na tym polega\u0107.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-klucz-moze-byc-liczba\">Czy klucz mo\u017ce by\u0107 liczb\u0105?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tak. Kluczem mo\u017ce by\u0107 <code>int<\/code>, <code>float<\/code>, <code>str<\/code>, <code>tuple<\/code> i inne typy hashowalne.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"dlaczego-pojawia-sie-key-error\">Dlaczego pojawia si\u0119 <code>KeyError<\/code>?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bo program pr\u00f3buje odczyta\u0107 nieistniej\u0105cy klucz przez zapis <code>dict[\"klucz\"]<\/code>. Bezpieczniej u\u017cywa\u0107 <code>get()<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kiedy-lepiej-uzyc-listy-zamiast-slownika\">Kiedy lepiej u\u017cy\u0107 listy zamiast s\u0142ownika?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Gdy dane maj\u0105 naturaln\u0105 kolejno\u015b\u0107 i dost\u0119p odbywa si\u0119 przez pozycj\u0119, nie przez nazw\u0119.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-slownik-jest-szybszy-od-listy\">Czy s\u0142ownik jest szybszy od listy?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Przy wyszukiwaniu po kluczu zazwyczaj tak, poniewa\u017c \u015brednia z\u0142o\u017cono\u015b\u0107 to O(1). Przy prostym przechodzeniu po elementach r\u00f3\u017cnica mo\u017ce by\u0107 ma\u0142a.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-mozna-sortowac-slownik\">Czy mo\u017cna sortowa\u0107 s\u0142ownik?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tak, zwykle przez funkcj\u0119 <code>sorted()<\/code> oraz sortowanie po kluczach albo warto\u015bciach.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Przyk\u0142ad<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nfor k in sorted(student):\\n print(k, student[k])\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">S\u0142ownik jest jedn\u0105 z tych struktur, kt\u00f3re wydaj\u0105 si\u0119 proste tylko na pocz\u0105tku. P\u00f3\u017aniej okazuje si\u0119, \u017ce od jako\u015bci pracy z nim zale\u017cy czytelno\u015b\u0107 ca\u0142ego programu, liczba b\u0142\u0119d\u00f3w i czas potrzebny na utrzymanie kodu. Dobrze u\u017cywany porz\u0105dkuje projekt, \u017ale u\u017cywany tworzy ba\u0142agan, kt\u00f3ry wraca po kilku miesi\u0105cach ze zdwojon\u0105 si\u0142\u0105.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>\u0179r\u00f3d\u0142o Foto: Freepik<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Praca z danymi bardzo szybko pokazuje, \u017ce same zmienne i listy przestaj\u0105 wystarcza\u0107. Gdy trzeba powi\u0105za\u0107 konkretn\u0105 warto\u015b\u0107 z nazw\u0105, identyfikatorem, adresem e-mail, numerem produktu albo statusem zam\u00f3wienia, potrzebna jest struktura oparta nie na pozycji elementu, ale na kluczu. Dzi\u0119ki temu odczyt danych jest szybszy, kod czytelniejszy i \u0142atwiej unikn\u0105\u0107 b\u0142\u0119d\u00f3w zwi\u0105zanych z indeksami. Najwygodniejszym punktem startu do zrozumienia pracy z danymi w Pythonie pozostaje S\u0142ownik Python. S\u0142ownik Python jako struktura mapuj\u0105ca klucze na warto\u015bci i r\u00f3\u017cnica wzgl\u0119dem listy S\u0142ownik (dictionary, dict) to wbudowana struktura danych oparta na parach klucz: warto\u015b\u0107. Zamiast pyta\u0107 program \u201eco jest na pozycji numer 3\u201d, pytamy \u201ejaka warto\u015b\u0107 jest przypisana do klucza email\u201d. To fundamentalna r\u00f3\u017cnica wzgl\u0119dem listy. Lista: S\u0142ownik: Przyk\u0142ad praktyczny: Dla u\u017cytkownika systemu zamiast: bezpieczniej jest u\u017cy\u0107: W kodzie oznacza to mniej pomy\u0142ek. Po miesi\u0105cu \u0142atwiej zrozumie\u0107 uzytkownik[&#8222;wiek&#8221;] ni\u017c uzytkownik[2]. Klucze musz\u0105 by\u0107 hashowalne, czyli niezmienne. Najcz\u0119\u015bciej u\u017cywa si\u0119: Nie u\u017cywa si\u0119 jako kluczy: bo s\u0105 mutowalne. Podstawowa sk\u0142adnia tworzenia i odczytu danych Operacja Przyk\u0142ad kodu Utworzenie s\u0142ownika python\\nstudent = {\\n \\&#8221;imie\\&#8221;: \\&#8221;Anna\\&#8221;,\\n \\&#8221;wiek\\&#8221;: 21,\\n \\&#8221;kierunek\\&#8221;: \\&#8221;Informatyka\\&#8221;\\n}\\n Odczyt warto\u015bci python\\nprint(student[\\&#8221;imie\\&#8221;])\\n Zmiana warto\u015bci python\\nstudent[\\&#8221;wiek\\&#8221;] = 22\\n Dodanie nowego pola python\\nstudent[\\&#8221;rok\\&#8221;] = 2\\n Odpowiednik idei w C++ i C Python ma s\u0142ownik wbudowany, ale ta sama logika istnieje tak\u017ce w innych j\u0119zykach. J\u0119zyk Przyk\u0142ad C++ (unordered_map) cpp\\n#include &lt;iostream&gt;\\n#include &lt;unordered_map&gt;\\nusing namespace std;\\n\\nint main() {\\n unordered_map&lt;string, int&gt; wiek;\\n wiek[\\&#8221;Anna\\&#8221;] = 21;\\n cout &lt;&lt; wiek[\\&#8221;Anna\\&#8221;] &lt;&lt; endl;\\n return 0;\\n}\\n C (prosta symulacja) c\\n#include &lt;stdio.h&gt;\\n#include &lt;string.h&gt;\\n\\nstruct Student {\\n char klucz[20];\\n int wartosc;\\n};\\n\\nint main() {\\n struct Student s;\\n strcpy(s.klucz, \\&#8221;wiek\\&#8221;);\\n s.wartosc = 21;\\n printf(\\&#8221;%d\\\\n\\&#8221;, s.wartosc);\\n return 0;\\n}\\n C nie ma wbudowanego s\u0142ownika, wi\u0119c zwykle u\u017cywa si\u0119 w\u0142asnych struktur lub bibliotek z tablicami haszuj\u0105cymi. Najwa\u017cniejsze operacje, kt\u00f3re wykonuje si\u0119 codziennie podczas pracy ze struktur\u0105 S\u0142ownik Python W praktyce nie chodzi o samo utworzenie s\u0142ownika, ale o bezpieczne pobieranie danych, iteracj\u0119 i kontrol\u0119 b\u0142\u0119d\u00f3w. Najwi\u0119cej problem\u00f3w pocz\u0105tkuj\u0105cy maj\u0105 w\u0142a\u015bnie tutaj. Dost\u0119p przez nawiasy kwadratowe i problem KeyError Kod: print(student[&#8222;email&#8221;]) zadzia\u0142a tylko wtedy, gdy klucz istnieje. Je\u015bli nie istnieje, Python zg\u0142osi: KeyError To cz\u0119sty b\u0142\u0105d w aplikacjach webowych, parserach JSON i automatyzacji plik\u00f3w. Bezpieczniejsze jest u\u017cycie .get(). Metoda Przyk\u0142ad Ryzykowny odczyt python\\nprint(student[\\&#8221;email\\&#8221;])\\n Bezpieczny odczyt python\\nprint(student.get(\\&#8221;email\\&#8221;))\\n Warto\u015b\u0107 domy\u015blna python\\nprint(student.get(\\&#8221;email\\&#8221;, \\&#8221;brak\\&#8221;))\\n To drobiazg, ale oszcz\u0119dza du\u017co czasu przy debugowaniu. Iteracja po kluczach, warto\u015bciach i parach S\u0142ownik mo\u017cna przegl\u0105da\u0107 na kilka sposob\u00f3w. Cel Kod Same klucze python\\nfor k in student:\\n print(k)\\n Same warto\u015bci python\\nfor v in student.values():\\n print(v)\\n Klucz i warto\u015b\u0107 python\\nfor k, v in student.items():\\n print(k, v)\\n Najcz\u0119\u015bciej u\u017cywa si\u0119 .items(). Kod jest wtedy czytelny i nie wymaga dodatkowego odwo\u0142ania student[k]. Usuwanie element\u00f3w i kontrola istnienia klucza Operacja Kod Usuni\u0119cie przez del python\\ndel student[\\&#8221;rok\\&#8221;]\\n Usuni\u0119cie przez pop() python\\nstudent.pop(\\&#8221;rok\\&#8221;)\\n Sprawdzenie klucza python\\nif \\&#8221;wiek\\&#8221; in student:\\n print(\\&#8221;istnieje\\&#8221;)\\n pop() jest wygodniejsze, bo mo\u017ce zwr\u00f3ci\u0107 usuwan\u0105 warto\u015b\u0107. Z\u0142o\u017cono\u015b\u0107 czasowa i dlaczego s\u0142ownik jest szybki W typowym przypadku: Lista dla wyszukiwania po warto\u015bci zwykle wymaga: To du\u017ca r\u00f3\u017cnica. Dla 10 element\u00f3w nie ma znaczenia. Dla 500 000 rekord\u00f3w ju\u017c bardzo. Powodem jest u\u017cycie tablicy haszuj\u0105cej. Uproszczony model dzia\u0142ania funkcji hash Etap Opis 1 Python oblicza hash klucza 2 Hash wskazuje miejsce w pami\u0119ci 3 Program trafia bezpo\u015brednio do warto\u015bci To w\u0142a\u015bnie daje szybko\u015b\u0107. Nie jest to magia, tylko dobra organizacja danych. Pu\u0142apki wydajno\u015bciowe, dobre praktyki i sytuacje, w kt\u00f3rych S\u0142ownik Python nie jest najlepszym wyborem S\u0142ownik jest bardzo wygodny, ale nie zawsze najlepszy. Zbyt cz\u0119ste u\u017cywanie go \u201ebo jest uniwersalny\u201d te\u017c bywa b\u0142\u0119dem. Duplikaty kluczy nie istniej\u0105 To wa\u017cne. Kod: Przyk\u0142ad Kod Powielony klucz python\\ndane = {\\n \\&#8221;id\\&#8221;: 1,\\n \\&#8221;id\\&#8221;: 2\\n}\\nprint(dane)\\n wynikiem b\u0119dzie: {&#8217;id&#8217;: 2} Druga warto\u015b\u0107 nadpisuje pierwsz\u0105. Je\u015bli potrzebne s\u0105 wielokrotne warto\u015bci, lepiej u\u017cy\u0107: Zagnie\u017cd\u017cone s\u0142owniki i czytelno\u015b\u0107 kodu Przyk\u0142ad: Kod python\\nfirma = {\\n \\&#8221;pracownik\\&#8221;: {\\n \\&#8221;imie\\&#8221;: \\&#8221;Jan\\&#8221;,\\n \\&#8221;adres\\&#8221;: {\\n \\&#8221;miasto\\&#8221;: \\&#8221;Warszawa\\&#8221;\\n }\\n }\\n}\\n Dost\u0119p: firma[&#8222;pracownik&#8221;][&#8222;adres&#8221;][&#8222;miasto&#8221;] Technicznie poprawne, ale po kilku poziomach zaczyna by\u0107 trudne w utrzymaniu. W wi\u0119kszych projektach cz\u0119sto lepiej przej\u015b\u0107 na: bo struktura staje si\u0119 przewidywalna. Liczenie cz\u0119sto\u015bci wyst\u0119powania danych To bardzo cz\u0119sty przypadek. Na przyk\u0142ad analiza log\u00f3w: Kod python\\ntekst = [\\&#8221;a\\&#8221;, \\&#8221;b\\&#8221;, \\&#8221;a\\&#8221;, \\&#8221;c\\&#8221;, \\&#8221;a\\&#8221;]\\nlicznik = {}\\n\\nfor x in tekst:\\n licznik[x] = licznik.get(x, 0) + 1\\n\\nprint(licznik)\\n To klasyczny wzorzec. W praktyce spotyka si\u0119 go bardzo cz\u0119sto na rozmowach technicznych. Wz\u00f3r logiczny licznika Zastosowanie Zapis Aktualizacja licznika nowa_wartosc = stara_wartosc + 1 Wersja z warto\u015bci\u0105 domy\u015bln\u0105 dict.get(klucz, 0) + 1 Niby proste, ale bez tego trudno pisa\u0107 sensowne przetwarzanie danych. Przyk\u0142ady praktyczne z codziennej pracy programisty i administratora danych Najbardziej naturalne zastosowania: JSON praktycznie jest bliskim odpowiednikiem s\u0142ownika. Przyk\u0142ad: JSON \/ Python python\\nzamowienie = {\\n \\&#8221;id\\&#8221;: 150,\\n \\&#8221;status\\&#8221;: \\&#8221;oplacone\\&#8221;,\\n \\&#8221;kwota\\&#8221;: 249.99\\n}\\n Dlatego dobra znajomo\u015b\u0107 tej struktury jest obowi\u0105zkowa przy: Bez tego szybko pojawia si\u0119 chaos. FAQ dotycz\u0105ce pracy ze s\u0142ownikami w Pythonie i najcz\u0119stszych problem\u00f3w pocz\u0105tkuj\u0105cych Czy s\u0142ownik zachowuje kolejno\u015b\u0107 element\u00f3w? Od Python 3.7 tak &#8211; kolejno\u015b\u0107 dodawania element\u00f3w jest zachowywana. W starszych wersjach nie nale\u017ca\u0142o na tym polega\u0107. Czy klucz mo\u017ce by\u0107 liczb\u0105? Tak. Kluczem mo\u017ce by\u0107 int, float, str, tuple i inne typy hashowalne. Dlaczego pojawia si\u0119 KeyError? Bo program pr\u00f3buje odczyta\u0107 nieistniej\u0105cy klucz przez zapis dict[&#8222;klucz&#8221;]. Bezpieczniej u\u017cywa\u0107 get(). Kiedy lepiej u\u017cy\u0107 listy zamiast s\u0142ownika? Gdy dane maj\u0105 naturaln\u0105 kolejno\u015b\u0107 i dost\u0119p odbywa si\u0119 przez pozycj\u0119, nie przez nazw\u0119. Czy s\u0142ownik jest szybszy od listy? Przy wyszukiwaniu po kluczu zazwyczaj tak, poniewa\u017c \u015brednia z\u0142o\u017cono\u015b\u0107 to O(1). Przy prostym przechodzeniu po elementach r\u00f3\u017cnica mo\u017ce by\u0107 ma\u0142a. Czy mo\u017cna sortowa\u0107 s\u0142ownik? Tak, zwykle przez funkcj\u0119 sorted() oraz sortowanie po kluczach albo warto\u015bciach. Przyk\u0142ad python\\nfor k in sorted(student):\\n print(k, student[k])\\n S\u0142ownik jest jedn\u0105 z tych struktur, kt\u00f3re wydaj\u0105 si\u0119 proste tylko na pocz\u0105tku. P\u00f3\u017aniej okazuje si\u0119, \u017ce od jako\u015bci pracy z nim zale\u017cy czytelno\u015b\u0107 ca\u0142ego programu, liczba b\u0142\u0119d\u00f3w i czas potrzebny na utrzymanie kodu. Dobrze u\u017cywany porz\u0105dkuje projekt, \u017ale u\u017cywany tworzy ba\u0142agan, kt\u00f3ry wraca po kilku miesi\u0105cach ze zdwojon\u0105 si\u0142\u0105. \u0179r\u00f3d\u0142o Foto: Freepik<\/p>\n","protected":false},"author":1,"featured_media":1349,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[],"class_list":["post-1348","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jezyk-programowania"],"_links":{"self":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1348","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/comments?post=1348"}],"version-history":[{"count":3,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1348\/revisions"}],"predecessor-version":[{"id":1377,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1348\/revisions\/1377"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media\/1349"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1348"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/categories?post=1348"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/tags?post=1348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}