Słowniki są zbiorem składającym się z klucza i wartości powiązanej z tym kluczem. Mogą spełniać taką samą rolę jak słowniki w bazach danych. Przypuśćmy że w hurtownii produktów AGD-RTV mamy wiele produktów wielu marek i wielu rodzajów. Na każdym z produktów znajduje się naklejka z kodem typu "AMICA561", które wykorzystujemy do odnalezienia szerszych informacji o produkcie. Oczywiście pod danym kluczem/kodem mogą znajdować się informacje tylko o jednym produkcie. Dwa produkty nie mogą posiadać tego samego kodu. W podobny sposób działają słowniki w Pythonie. Zwykle korzystając z klucza będziemy wyszukiwać wartość. Słowniki podobnie jak listy (i przeciwnie do krotek) są modyfikowalne.
Podobnie jak w przypadku list czy krotek, mamy kilka wariantów tworzenia słowników. Poniżej przykład tworzenia pustych słowników:
slownik={}
slownik2=dict()
Możemy też tworząc słownik, od razu zapełnić go danymi:
info={
"LG123": "Telewizor 60' z HD Ready, wejściem na internety i filtrem reklam",
"SONY666": "Piekielnie dobry telewizor",
"SZAJSUNG999": "Telewizor świetnie nadający się do zakrycia dziury w ścianie (i niczego więcej)"
}
Wartości "LG123", "SONY666", "SZAJSUNG999" są w powyższym słowniku kluczami i to właśnie z nich korzystając będziemy wyszukiwali wartości. Wartości znajdują się po prawej stronie każdej wartości klucza po znaku ":". Kluczem mogą być nie tylko ciągi tekstowe, ale również liczby czy typy złożone. Podobnie rzecz ma się z wartościami
Wartości ze słowników pobieramy na podstawie klucza. Poniższa konstrukcja może się wydać znajoma. Być może skojarzysz ją z pobieraniem wartości z krotek czy list, choć tam pobieraliśmy wartości za pomocą indeksu który był liczbowy. W tym przypadku nie chodzi jednak o indeks elementu, a o wartość klucza. Nadałem kluczom wartości tekstowe by uniknąć nieporozumień. Gdybyś wywołał np. "info[2]" to nie oznaczałoby to pobrania elementu z trzeciej pozycji (jak w przypadku list czy krotek) a element o kluczu "2" (który wcale nie musiałby się na tej pozycji znaleźć). Same klucze mogą być mieszanych typów. W obrębie jednego słownika możesz mieć zarówno klucze tekstowe jak i liczbowe.
print( info["SONY666"] )
Po słownikach możemy iterować w podobny sposób jak po listach czy krotkach, z tą różnicą że tutaj iterator jest kluczem a nie wartością:
for i in info:
print(info[i])
Taki zapis będzie równoznaczny z:
for k in info.keys():
print(info[k])
Wynik działania powyższego kodu:
Telewizor 60' z HD Ready, wejściem na internety i filtrem reklam
Piekielnie dobry telewizor
Telewizor świetnie nadający się do zakrycia dziury w ścianie (i niczego więcej)
"i" w tym przypadku reprezentuje kolejne klucze w ramach słownika. Przechodzimy po całej długości słownika i korzystając z kolejnych wartości klucza wywołujemy "info[i]", czyli pobieramy kolejne wartości na podstawie kolejnego klucza.
W drugim przypadku skorzystałem z wbudowanej funkcji "keys" z której skorzystanie w takim kontekście da nam taki sam wynik jak poprzednie rozwiązanie. Słowniki posiadają też funkcję "values" która działa na podobnej zasadzie jak "keys", z tą różnicą że zamiast listy kluczy zwraca listę wartości (po której również możemy iterować). Lets czek dis ałt:
print(info.keys())
zwraca:
dict_keys(['LG123', 'SONY666', 'SZAJSUNG999'])
a:
print(info.values())
zwraca:
dict_values(["Telewizor 60' z HD Ready, wejściem na internety i filtrem reklam", 'Piekielnie dobry telewizor', 'Telewizor świetnie nadający się do zakrycia dziury w ścianie (i niczego więcej)'])
Podobnie jak w listach czy krotkach, możemy analogiczną konstrukcją sprawdzić czy obiekt znajduje się na liście:
if "LG123" in info:
print("Mamy taki produkt")
else:
print("niet :(")
W podobny sposób możemy przeszukać wartości zamiast kluczy, i tu właśnie skorzystamy z funkcji "values":
if "Telewizor 60' z HD Ready, wejściem na internety i filtrem reklam" in info.values():
print("mamy produkt o takim opisie")
else:
print("taki opis nie pasuje do żadnego produktu")
Sprawdzana w "if" wartość musi jednak dokładnie odpowiadać wartości ze słownika. Zwracam na to uwagę ponieważ w przypadku omawianych wcześniej łańcuchów tekstowych konstrukcja typu "if 'wartość' in 'coś coś coś wartość' zwróciłaby True i mógłbyś się tym zasugerować.
Dodajemy i nadpisujemy elementy słowników w taki sam sposób:
info["KLUCZ"]="WARTOŚĆ"
Jeśli w słowniku nie będzie elementu o podanym kluczu to zostanie od dodany. Jeśli będzie, zostanie nadpisany.
Kasowanie elementu ze słownika odbywa się w podobny sposób jak w krotkach czy listach, z tą różnicą że zamiast indeksu elementu podajemy jego klucz:
del info["LG123"]
Komentarze (0)
Brak komentarzy...