Python:如何在这里使用列表推导?

时间:2011-02-02 20:44:28

标签: python list-comprehension

我有以下表格的数据:

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]]

但我希望结果是一个扁平的列表。

3 个答案:

答案 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]