2016-11-23 2 views
1

Поэтому в основном я обход через гнездовой словарь extension так:Проверьте, включена ли вложенные ключи словаря существуют

extension['value1']['value2']['value3']['value4'] 

Однако, иногда файл ДИКТ может быть немного иначе:

extension['value1']['value2']['blah1']['value4'] 

Как могу ли я объяснить этот сценарий? Я не придется беспокоиться о большое количество сценариев, ключ будет только когда будет value3 или blah1

ответ

2

Вы могли бы написать функцию, чтобы получить первый ключ, который существует:

def get_first_item(items, keys): 
    for k in keys: 
     if k in items: 
      return items[k] 

    raise KeyError 

И затем использовать его как это:

get_first_item(extension['value1']['value2'], ['value3', 'blah1'])['value4'] 
2

Вы должны явно проверить на key, а затем извлечь его значение. Например:

optional_keys = ['value3', 'blah1'] 
value = None 

for optional_key in optional_keys: 
    if optional_key in extension['value1']['value2']: 
     value = extension['value1']['value2'][optional_key]['value4'] 
     break 
+1

Спасибо, Yous и публикуемую в основном то же самое время, так что я должен был Примите одно, и я пошел Ryans, поскольку это показалось немного более интуитивным. Я ценю ответ, хотя всегда хорошо иметь разные подходы :) –

2

Я думаю, что вышеупомянутые два ответа вполне может исправить вашу проблему. Так как ваш ключ будет либо value3 или blah1, вместо функции, вы можете также использовать следующий код, когда вы цикл по словарю:

try: 
    value = extension['value1']['value2']['value3']['value4'] 
except Exception as e: # except KeyError: 
    # print(e) 
    value = extension['value1']['value2']['blah1']['value4'] 
+0

Учитывая, что есть только два ключа, которые могут отличаться, он будет работать. –

Смежные вопросы