2016-03-10 3 views
0

В python 2.7 У меня есть словарь словарей, и я пытаюсь получить значения из этого быстрым способом. Однако иногда один из ключей (может быть один) не существует в моем словаре, в этом случае я хотел бы получить значение по умолчанию.Python dict of dicts со значением по умолчанию

Мой словарь выглядит следующим образом:

values = { '1A' : { '2A' : 'valAA', '2B' : 'valAB'}, 
      '1B' : { '2A' : 'valBA', '2B' : 'valBB'} } 

, который прекрасно работает, когда я запрашиваю его с существующими ключами:

>>> values['1A']['2A'] 
'valAA' 
>>> values.get('1B').get('2B') 
'valBB' 

Как заставить его сделать это:

>>> values.get('not a key').get('not a key') 
'not present' 
+0

К сожалению, пропустили, что один, подумал я понял, что-то новое, но это дубликат – Swier

ответ

0

Это работает как шарм:

values.get(key1, {}).get(key2, defaultValue) 

В случае, если второй ключ отсутствует в словаре, возвращается значение по умолчанию второго .get(). В случае, если первый ключ отсутствует в словаре, значением по умолчанию является пустой словарь, который гарантирует, что второй ключ не будет присутствовать в нем. Затем будет возвращено значение по умолчанию для второго .get().

Например:

>>> defaultValue = 'these are not the values you are looking for' 
>>> key1, key2 = '1C', '2C' 
>>> values.get(key1, {}).get(key2, defaultValue) 
'these are not the values you are looking for' 
>>> key1, key2 = '1A', '2B' 
>>> values.get(key1, {}).get(key2, defaultValue) 
'valAB' 
+0

Это не будет работать, если вы пытаетесь Клавишу2 первый – RafaelC

+0

@RafaelCardoso: почему бы вам попробовать key2 первый? Это прекрасно работает. –

+0

@MartijnPieters Я не видел гарантии, что вы знаете, какой ключ на первом месте. Возможно, в этом конкретном примере, когда ключи «упорядочены», но это, конечно, не общее решение. – RafaelC

2

Создайте функцию к получить значение.

values = { '1A' : { '2A' : 'valAA', '2B' : 'valAB'}, 
      '1B' : { '2A' : 'valBA', '2B' : 'valBB'} } 

def get_value(dict, k1, k2): 
    try: 
     return dict[k1][k2] 
    except KeyError as ex: 
     return 'does not exist' 

print get_value(values, '1A', '2A') 
print get_value(values, '1A', '4A') 
+0

Спасибо за предложение – Muctadir