繁体   English   中英

来自 3 个列表的字典/列表/元组理解

[英]Dictionary/list/tuple comprehension from 3 lists

假设我有以下 3 个列表:

x = ['a', 'a', 'b', 'b']
y = ['y1', 'y2', 'y3', 'y4']
z = ['p', 'p', 'p', 'p']

我正在尝试将 output 发送至:

[('a',['y1', 'y2'], ['p', 'p']),('b',['y3', 'y4'], ['p', 'p'])]

x 以固定的已知长度重复(此处已知长度为 2,即序列中的下一个为 c,c)。 x % known length 不一定是 0。z 不会总是有相同的项目。

我已经尝试使用defaultdict和许多版本的理解,但似乎无法破解它。 我将要处理的列表实际上要大得多,因此 for 循环需要很长时间。 所以我需要一些高性能的东西。

您可以将groupbyzip一起使用:

from itertools import groupby


x = ['a', 'a', 'b', 'b']
y = ['y1', 'y2', 'y3', 'y4']
z = ['p', 'p', 'p', 'p']

result = [(k, *list(zip(*grp))[1:]) for k, grp in groupby(zip(x, y, z), lambda s: s[0])]

# which gives
[('a', ('y1', 'y2'), ('p', 'p')), ('b', ('y3', 'y4'), ('p', 'p'))]

这个列表理解似乎可以解决问题:

data = [(x[i], [y[i], y[i + 1]], [z[i], z[i + 1]]) for i in range(0, len(x), 2)]
print(data)

Output

[('a', ['y1', 'y2'], ['p', 'p']), ('b', ['y3', 'y4'], ['p', 'p'])]

注意:我假设x总是成对具有相同的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM