Aby odpowiedzieć na pytanie „ jak mogę się dowiedzieć, czy dany indeks w tym dykcie został już ustawiony na wartość inną niż Brak ”, wolałbym:
try:
nonNone = my_dict[key] is not None
except KeyError:
nonNone = False
Jest to zgodne z już przywołaną koncepcją EAFP (łatwiej prosić o wybaczenie niż o pozwolenie). Unika także podwójnego wyszukiwania klucza w słowniku, tak jak by to było w przypadkukey in my_dict and my_dict[key] is not None
interesujące, gdyby wyszukiwanie było drogie.
W przypadku rzeczywistego problemu , który wystąpiłeś, tj. Zwiększenie wartości int, jeśli istnieje, lub ustawienie jej wartości domyślnej w innym przypadku, również polecam
my_dict[key] = my_dict.get(key, default) + 1
jak w odpowiedzi Andrew Wilkinsona.
Istnieje trzecie rozwiązanie, jeśli przechowujesz modyfikowalne obiekty w słowniku. Typowym tego przykładem jest multimapa , w której przechowujesz listę elementów dla swoich kluczy. W takim przypadku możesz użyć:
my_dict.setdefault(key, []).append(item)
Jeśli wartość klucza nie istnieje w słowniku, metoda setdefault ustawi drugi parametr setdefault. Zachowuje się jak standardowy my_dict [klucz], zwracając wartość klucza (która może być wartością nowo ustawioną).