Rozdział 11 · Mnóstwo informacji!
Metody słowników
pop, update, setdefault i reprezentacje keys/values/items to narzędzia, bez których żaden prawdziwy słownik nie może się obejść.
pop() i popitem()
dict_pop.py
student = {"name": "Cartesian", "age": 13, "grade": „7. klasa”}
age = student.pop("age")
print(student, age) # {'name': 'Cartesian', 'grade': '7 klasa'} 13
dict_popitem.py
last_pair = student.popitem()
print(last_pair) # ('grade', '7 klasa') — ostatnia dodana para
pop() słownik — według tonacji, nie pozycji
W przeciwieństwie do
list.pop(index), w słowniku .pop(key) akceptuje KLUCZ, a nie pozycję numeryczną — słownik po prostu nie ma pozycji. Możesz przekazać wartość domyślną jako drugi argument, jeśli klucz może nie istnieć: student.pop("phone", None).update() — połączyć kilka par naraz
dict_update.py
student = {"name": "Cartesian", "age": 13}
student.update({"age": 14, "city": „Moskwa”})
print(student) #age zastąpił city dodał
setdefault() - Dodaj wartość tylko wtedy, gdy klucz nie istnieje
setdefault.py
counts = {}
word = "python"
counts.setdefault(word, 0)
counts[word] += 1
print(counts) # {'python': 1}
setdefault() = „jeśli nie masz klucza, stwórz go z wartością domyślną”
counts.setdefault(word, 0) nic nie robi, jeśli word już znajduje się w słowniku i tworzy rekord o wartości 0, jeśli nie było klucza — w obu przypadkach, po wywołaniu można bezpiecznie zapisać counts[word] += 1. Pełny algorytm obliczania częstotliwości słów tym podejściem znajduje się w §11.24.keys(), values(), items() nie są zwykłymi listami
keys_values_items.py
student = {"name": "Cartesian", "age": 13}
print(student.keys()) # dict_keys(['name', 'age'])
print(student.values()) # dict_values(['Cartesian', 13])
print(student.items()) # dict_items([('name', 'Cartesian'), ('age', 13)])
To są „występy na żywo”
.keys(), .values() oraz .items() obiekty reprezentacji zwracającej (dict_keys i tak dalej) — odzwierciedlają słownik w czasie rzeczywistym. Do iteracji pętlą nie ma to znaczenia, ale jeśli potrzebny jest konkretnie lista, opakuj w list(student.keys()).Kolejność słownika
Nowoczesne Python zachowuje kolejność wstawiania
Począwszy od Python 3.7, kolejność par w słowniku gwarantowana jest taka, jaką zostały dodane — jest to oficjalna gwarancja języka, a nie przypadkowa implementacja. Ale słownik pozostaje wyświetlenie (dostęp przez klucz) zamiast kolekcji pozycyjnej — nie pisz kodu opartego na pozycjach słownikowych liczb.
Sprawdzanie in - tylko klucze
membership_dict.py
student = {"name": "Cartesian", "age": 13}
print("name" in student) #True – taki KLUCZ istnieje
print("Cartesian" in student) # False — to wartość, nie klucz!
print("Cartesian" in student.values()) # True — i tak poprawnie sprawdzić wartość
in słownik sprawdza klucze, a nie wartości
Powszechny błąd początkujących:
value in my_dict sprawdza, czy istnieje value wśród KLUCZY. Aby sprawdzić wartości, musisz wyraźnie zapisać value in my_dict.values().Klucze słownikowe muszą być również haszalne
hashable_keys.py
{["x", "y"]: 1}
# TypeError: cannot use 'list' as a dict key (unhashable type: 'list')
Ta sama zasada hashowalności z §11.16 – lista nie może być używana jako klucz słownikowy dla z tego samego powodu, dla którego nie można go umieścić w zbiór.
Praktyka: pop, update, setdefault, keys/values/items
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji