我有以下表格的数据:
foos = [{'bar': [{'baz': 1}, {'baz': 2}]}, {'bar': [{'baz': 3}, {'baz': 4}]}, {'bar': [{'baz': 5}, {'baz': 6}]}]
我想要一个能够产生的列表理解:
[1, 2, 3, 4, 5, 6]
我不太清楚该怎么做。这种方式有效:
>>> [[bar['baz'] for bar in foo['bar']] for foo in foos]
[[1, 2], [3, 4], [5, 6]]
但我希望结果是一个扁平的列表。
答案 0 :(得分:10)
您可以在一个列表解析中使用两个for .. in
子句来代替嵌套列表推导:
In [19]: [item['baz'] for foo in foos for item in foo['bar']]
Out[19]: [1, 2, 3, 4, 5, 6]
请注意
[... for foo in foos for item in foo['bar']]
粗略地翻译成
for foo in foos:
for item in foo['bar']:
...
答案 1 :(得分:4)
这样做
[y['baz'] for x in foos for y in x['bar']]
如果你认为这不是很自然,我同意。
除非有其他理由这样做,否则可能显式代码会更好。
答案 2 :(得分:0)
foos = [{'bar': [{'baz': 1}, {'baz': 2}]}, {'bar': [{'baz': 3}, {'baz': 4}]}, {'bar': [{'baz': 5}, {'baz': 6}]}]
for x in foos:
for y in x:
for i in range(len(x[y])):
for z in x[y][i]:
print x[y][i][z]