在我发现嵌套列表理解如何工作之后,我试图使嵌套字典理解起作用。我成功创建了嵌套字典理解,尽管我仍然困惑为什么语法不同。在嵌套列表理解中,可以说内部循环位于外部循环之内,而对于字典,内部循环紧随外部循环。
示例:
alist = [[1,2,3],[4,5,6],[7,8,9]]
print([[[xi, index] for index, xi in enumerate(x) ] for x in alist])
print({xi: index for x in alist for index, xi in enumerate(x)})
[[[1, 0], [2, 1], [3, 2]], [[4, 0], [5, 1], [6, 2]], [[7, 0], [8, 1], [9, 2]]]
{1: 0, 2: 1, 3: 2, 4: 0, 5: 1, 6: 2, 7: 0, 8: 1, 9: 2}
有人可以澄清这种语法差异吗?还是我在这里做错了什么?
答案 0 :(得分:0)
也许看一下是否同时展开了两个循环,在第一种情况下,您看到结果中的子列表被追加到了更大的列表中,这就是在列表理解中创建了内部阻塞层,并且必须连同其for index, xi in enumerate(x)
。当我们查看最底层的字典理解时,您将创建一个平面字典,该字典将附加到一个列表中,因此字典理解中没有内部障碍
lst = []
for x in alist:
new = []
for index, xi in enumerate(x):
new.append([xi, index])
lst.append(new)
print(lst)
# [[[1, 0], [2, 1], [3, 2]], [[4, 0], [5, 1], [6, 2]], [[7, 0], [8, 1], [9, 2]]]
d = {}
for x in alist:
for index, xi in enumerate(x):
d[xi] = index
print(d)
# {1: 0, 2: 1, 3: 2, 4: 0, 5: 1, 6: 2, 7: 0, 8: 1, 9: 2}
另一个示例将是创建嵌套字典理解也将有所帮助
print({alist.index(x):{xi:index for index, xi in enumerate(x)} for x in alist})
# {0: {1: 0, 2: 1, 3: 2}, 1: {4: 0, 5: 1, 6: 2}, 2: {7: 0, 8: 1, 9: 2}}