2015-01-28 18 views
9

Używam .get() do zapytania o klucze, które mogą ale nie muszą być obecne w słowniku.jak korzystać z .get() w zagnieżdżonym dict?

In [1]: a = {'hello': True} 
In [3]: print(a.get('world')) 
None 

Mam jednak słowniki gdzie klucz Chcę sprawdzić, jest głębiej w struktury, a ja nie wiem, czy przodkowie są obecne czy nie. Jeśli dict jest b = {'x': {'y': {'z': True}}} muszę uciekać się do

In [5]: b.get('x') and b['x'].get('y') and b['x']['y'].get('z') 
Out[5]: True 

aby sprawdzić 'z' kiedy nie wiem, czy 'x' i 'y' istnieje?

Odpowiedz

8

Możesz powrócić pustego obiektu słownika od dict.get() złagodzić łańcuchowego połączenia:

b.get('x', {}).get('y', {}).get('z') 

ale może byłbyś lepiej łapanie KeyError wyjątek:

try: 
    value = b['x']['y']['z'] 
except KeyError: 
    value = None 
+0

Jak @Martijn punktów, w Python lepiej prosić o wybaczenie niż pozwolenie. Tak więc praca z wyjątkami powinna być właściwym kierunkiem! – Caumons

Powiązane problemy