我在 Python 中有这个列表列表:
[[100,XHS,0],
[100,34B,3],
[100,42F,1],
[101,XHS,2],
[101,34B,5],
[101,42F,2],
[102,XHS,1],
[102,34B,2],
[102,42F,0],
[103,XHS,0],
[103,34B,4],
[103,42F,2]]
我想找到最有效的方法(我正在处理大量数据)使用每个列表的最后一个元素为每个 id(第一个元素)创建一个新的列表列表。 所以对于上面的示例列表,我的结果是:
[[0,3,1],
[2,5,2],
[1,2,0],
[0,4,2]]
我如何在 Python 中实现它?谢谢
请您参考如下方法:
分解构建 block 的 itertools 方法 - 获取最后的元素,分成三组,将 3 组转换为列表...
from operator import itemgetter
from itertools import imap, izip
last_element = imap(itemgetter(-1), a)
in_threes = izip(*[iter(last_element)] * 3)
res = map(list, in_threes)
# [[0, 3, 1], [2, 5, 2], [1, 2, 0], [0, 4, 2]]
但是,看起来您想对第一个元素进行“分组”(而不是纯粹的 3 个连续项的 block ),因此您可以为此使用 defaultdict:
from collections import defaultdict
dd = defaultdict(list)
for el in a:
dd[el[0]].append(el[-1])
# defaultdict(<type 'list'>, {100: [0, 3, 1], 101: [2, 5, 2], 102: [1, 2, 0], 103: [0, 4, 2]})
