Popatrz – wynik obu skryptów jest taki sam:
country_leader = { 'DE' : 'Merkel' , 'PL' : 'Szydlo'} country_leader['FR'] = 'Macron' print(country_leader)
country_leader = { 'DE' : 'Merkel' , 'PL' : 'Szydlo'} country_leader.setdefault('FR','Macron') print(country_leader)
dlaczego? Bo 'FR’ na oryginalnej liście nie było. Zarówno przypisanie, jak i setdefault dodaje nowy kraj z jego leaderem.
Ale w następnym przykładzie jest inaczej. Tutaj zmieniamy Szydło na Morawiecki dla PL. Zapis dla PL już był i to polecenie dokonało zmian – Szydło zamienia się na Morawiecki:
country_leader = { 'DE' : 'Merkel' , 'PL' : 'Szydlo'} country_leader['PL'] = 'Morawiecki' print(country_leader)
ale tutaj instruujemy Pythona, że należy dodać zapis PL jeśli go tam nie ma i zainicjować go 'Morawiecki’
country_leader = { 'DE' : 'Merkel' , 'PL' : 'Szydlo'} country_leader.setdefault('PL', 'Morawiecki') print(country_leader)
Sęk w tym, że PL było na oryginalnej liście, więc nie dodaliśmy PL i nie wpisaliśmy 'Morawiecki’. Została Szydło.
Kiedy używać setdefault?
Korzystanie z setdefault jest best practice zamiast takiego kodu, który osobno sprawdza, czy PL jest na liście i jeśli nie, to dodaje taki zapis. setdefault pozwala to zrobić w jednym kroku!
country_leader = { 'DE' : 'Merkel' , 'PL' : 'Szydlo'} if 'PL' not in country_leader: country_leader['PL'] = 'Morawiecki' print(country_leader)