根据另一个列表的标签从列表中选择元素

9 投票
2 回答
3262 浏览
提问于 2025-04-17 17:34

我有两个列表,分别叫做Lx和Ly,Lx中的每个元素在Ly中都有一个对应的标签。举个例子:

Lx = [[1,2,5], [5,2,7], [7,0,4], [9,2,0], [1,8,5], [3,4,5], [3,2,7], [2,9,7]]
Ly = [A, C, A, B, A, B, C, C]

我该怎么简单地得到一个列表/标签,其中的元素是Lx中那些在Ly中有相同标签的元素呢?也就是说:

[[1,2,5], [7,0,4], [1,8,5]]
[[5,2,7], [3,2,7], [2,9,7]]
[[9,2,0], [3,4,5]]

2 个回答

1

下面的代码可以让你接近想要的效果:

from collections import defaultdict

Lx = [[1,2,5], [5,2,7], [7,0,4], [9,2,0], [1,8,5], [3,4,5], [3,2,7], [2,9,7]]
Ly = ['A', 'C', 'A', 'B', 'A', 'B', 'C', 'C']

d = defaultdict(list)
for x, y in zip(Lx, Ly):
  d[y].append(x)
d = dict(d)

print(d)

运行后会得到:

{'A': [[1, 2, 5], [7, 0, 4], [1, 8, 5]], 'C': [[5, 2, 7], [3, 2, 7], [2, 9, 7]], 'B': [[9, 2, 0], [3, 4, 5]]}
8
Lx = [[1,2,5], [5,2,7], [7,0,4], [9,2,0], [1,8,5], [3,4,5], [3,2,7], [2,9,7]]
Ly = ['A', 'C', 'A', 'B', 'A', 'B', 'C', 'C']
d = {}
for x,y in zip(Lx,Ly):
    d.setdefault(y, []).append(x)

d 现在是:

{'A': [[1, 2, 5], [7, 0, 4], [1, 8, 5]],
 'B': [[9, 2, 0], [3, 4, 5]],
 'C': [[5, 2, 7], [3, 2, 7], [2, 9, 7]]}

撰写回答