Python默认字典为相关键返回None

时间:2015-11-18 00:50:24

标签: python defaultdict pox

下面是我的字典

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

我在下面打印过这个词典(我只是粘贴了3个键的path_map: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

有人可以解释为什么这样做?

请注意,我从mysql表获取src和dst的值,其中这些值已经以VARCHAR的形式存储。

1 个答案:

答案 0 :(得分:0)

它与您在内部defaultdict中定义的默认值完全相同:lambda:(None,None)

因此,notexistent path_map[src][dst]的默认值为元组(None,None)

您会看到此类输出,因为(None, None)[0] == None(None,None)[1] == None