我在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]]
Run Code Online (Sandbox Code Playgroud)
我想找到最有效的方法(我正在处理大量数据)使用每个id(第一个元素)的每个列表中的最后一个元素创建一个新的列表列表.所以对于样本列表上面,我的结果是:
[[0,3,1],
[2,5,2],
[1,2,0],
[0,4,2]]
Run Code Online (Sandbox Code Playgroud)
我怎样才能在Python中实现它?谢谢
一个遍历构造块的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]]
Run Code Online (Sandbox Code Playgroud)
但是,看起来你想在第一个元素上"分组"(而不是纯粹的3个连续项块),所以你可以使用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]})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |