Mamy funkcję: Def Get_nested_dicts (elementy: DICT, * Klucze, Domyślne = Brak): Dla klawiszy w klawiszach: Spróbuj: Items = Elementy [Klucz] Z wyjątkiem Keyerror:

0
try_to_code 15 marzec 2021, 15:53

2 odpowiedzi

Najlepsza odpowiedź

Możesz użyć dict.get() w następujący sposób:

def get_nested_dicts(items: dict, *keys, default=None):
    for key in keys:
        items = items.get(key, default)
        if not isinstance(items, dict):
            break

    return items

Wejście

dictionary = {'a': {'b': {'c': 10}}}

print(get_nested_dicts(dictionary, 'a', 'b', 'c')) 
print(get_nested_dicts(dictionary, 'a', 'c', 'b')) 
print(get_nested_dicts(dictionary, 'd', 'e', 'g')) 

Wyjście

10
None
None

Tutaj get() ma dwa argumenty klucz i wartość domyślna do powrotu. Tutaj zwraca wartość odpowiadającą kluczu, jeśli klucz jest obecny w słowniku inaczej {X1}} jest zwracany.

0
Abhi_J 15 marzec 2021, 13:07

Myślę, że funkcja () pomoże Ci to trochę zoptymalizować.

def get_nested_dicts(items: dict, *keys, default=None):
    for key in keys:
        items = items.get(key, default)
        if not isinstance(items, dict): break
    return items

Innym pytaniowym sposobem jest użycie wieloznacznego - "zmniejszyć".

from functools import reduce

def get_nested_dicts(items: dict, *keys, default=None):
    return reduce(lambda v, k: v.get(k, default) if v else default, keys, items)
    

Dzięki.

0
Anil Kumar V V S S 15 marzec 2021, 13:09