python使用列表理解切片多级字典

时间:2018-12-13 18:14:14

标签: python list dictionary list-comprehension

我有3个列表,如下所示:

parent = [
   [
      {'x': 1, 'y': 2},
      {'x': 3, 'y': 8},
      .
      .
      .
   ],
   [
      {'x': 8, 'y': 5},
      {'x': 9, 'y': 6},
      .
      .
      .
   ]
]

我正在尝试使用列表推导将所有x放入一个列表中,并将所有y放入另一个列表中

我尝试过这样的事情: [gc for gc in [[父级p的[p.get('x')的c]中的c的语言]]]

,但是get('x')仍在列表中而不是元素上,这主要是由于[in]最内层。知道如何实现吗?

2 个答案:

答案 0 :(得分:1)

您在这里不需要列出列表。

这是通过operator.itemgetteritertools.chain进行的功能解决方案:

from itertools import chain
from operator import itemgetter

parent = [[{'x': 1, 'y': 2},
           {'x': 3, 'y': 8}],
          [{'x': 8, 'y': 5},
           {'x': 9, 'y': 6}]]

x, y = zip(*map(itemgetter('x', 'y'), chain.from_iterable(parent)))

print(x)  # (1, 3, 8, 9)
print(y)  # (2, 8, 5, 6)

您也可以使用嵌套列表推导:

x = [i['x'] for L in parent for i in L]
y = [i['y'] for L in parent for i in L]

请注意,嵌套理解的顺序与常规for循环一致:

x = []
for L in parent:
    for i in L:
        x.append(i['x'])

答案 1 :(得分:0)

您要查找的列表信息可能是:

[ [c.get('x') for c in p] for p in parent]

但是应该将其弄平,所以也许您应该执行以下操作:

print reduce(
    lambda curr, acc: curr + acc, 
    [ [c.get('x') for c in p] for p in parent],
    []
)

希望这会有所帮助。