1

下面是我的字典

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 形式存储。

4

1 回答 1

0

它的工作原理与您在 inner 中定义的默认值完全相同defaultdictlambda:(None,None)

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

您会看到这样的输出,因为(None, None)[0] == None(None,None)[1] == None

于 2015-11-18T01:08:49.927 回答