Словарь Python по умолчанию, возвращающий None для соответствующих ключей

Ниже мой словарь

path_map = defaultdict(lambda:defaultdict(lambda:(None,None)))

Я напечатал этот словарь ниже (я просто вставляю path_map для 3 ключей: от 00-00-00-00-00-01 до 00-00-00-00-00-03)

for key in path_map:
  print key,path_map[key]

00-00-00-00-00-01 defaultdict(<function <lambda> at 0x7f9062a17050>, {00-00-00-00-00-05: (1, None), 00-00-00-00-00-03: (2, 00-00-00-00-00-02), 00-00-00-00-00-02: (1, None), 00-00-00-00-00-01: (0, None), 00-00-00-00-00-04: (2, 00-00-00-00-00-02), '00-00-00-00-00-03': (None, None)})

00-00-00-00-00-02 defaultdict(<function <lambda> at 0x7f9062a170c8>, {00-00-00-00-00-04: (1, None), 00-00-00-00-00-02: (0, None), 00-00-00-00-00-03: (1, None), 00-00-00-00-00-01: (1, None), 00-00-00-00-00-05: (1, None)})

00-00-00-00-00-03 defaultdict(<function <lambda> at 0x7f9062a17140>, {00-00-00-00-00-03: (0, None), 00-00-00-00-00-05: (2, 00-00-00-00-00-02), 00-00-00-00-00-04: (2, 00-00-00-00-00-02), 00-00-00-00-00-02: (1, None), 00-00-00-00-00-01: (2, 00-00-00-00-00-02)})

Но когда я передаю эти входные данные (src: 00-00-00-00-00-01, dst:00-00-00-00-00-03), я не получаю никакого значения:

print path_map[src][dst][0]
print path_map[src][dst][1]
print src
print dst

Выход:

None
None
00-00-00-00-00-01
00-00-00-00-00-03

Может кто-нибудь объяснить, почему так работает??

Обратите внимание, что я получаю значения src и dst из таблицы mysql, где они хранятся в терминах VARCHAR.

1 ответ

Он работает точно так же, как вы определили значение по умолчанию во внутреннем defaultdict: lambda:(None,None)

Итак, значение по умолчанию для notexisting path_map[src][dst] будет кортеж (None,None)

Вы видите такой вывод, потому что (None, None)[0] == None а также (None,None)[1] == None,

Другие вопросы по тегам