我有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]最内层。知道如何实现吗?
答案 0 :(得分:1)
您在这里不需要列出列表。
这是通过operator.itemgetter
和itertools.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],
[]
)
希望这会有所帮助。