Aby uzyskać dużą listę zagnieżdżonych słowników, chcę sprawdzić, czy zawierają one klucz. Każda z nich może lub nie może mieć jedną z zagnieżdżonych słowników, więc jeśli pętla I to wyszukiwanie przez wszystkie z nich zgłosi błąd:Sprawdź zagnieżdżone wartości słownika?
for Dict1 in DictionariesList:
if "Dict4" in Dict1['Dict2']['Dict3']:
print "Yes"
Moje rozwiązanie tak daleko jest:
for Dict1 in DictionariesList:
if "Dict2" in Dict1:
if "Dict3" in Dict1['Dict2']:
if "Dict4" in Dict1['Dict2']['Dict3']:
print "Yes"
Ale to ból głowy, brzydki i prawdopodobnie mało efektywny. Jaki byłby właściwy sposób na zrobienie tego w pierwszym typie, ale bez zgłaszania błędu, gdy słownik nie istnieje?
Niesamowite, przetestowane i działa, bardzo doceniane. Przyjmie jak najszybciej. Naprawdę Ninja. –
Pierwsza propozycja zakończy się niepowodzeniem, jeśli w łańcuchu znajdą się klucze "Brak". Np. Test nie będzie działał dla 'Dict1 = {'Dict2': None}'. Wydaje się więc, że złapanie wyjątku jest najczystszym rozwiązaniem. –
@AlexO: nie powiedzie się dla żadnego obiektu, który nie ma metody '.get()', tak. Zadaniem tego kodu nie jest uwzględnianie każdej możliwości; chyba że wyraźnie potrzebujesz obsługiwać różne typy wartości, nie przechwytuj tego wyjątku, ponieważ oznacza to błąd w innym miejscu. –