3 回答

TA貢獻1900條經驗 獲得超5個贊
對于您的 2d 列表結構,您可以使用 zip 和列表理解
lst = [['dragon', 11], ['dragon', 111], ['stage_1', 1], ['stage_1', 2], ['stage_2', 10], ['stage_2', 12]]
k, v = zip(*lst)
result = [[k[i], v[i:i+2]] for i in range(0, len(k), 2)]
print(result)
輸出
[['dragon', (11, 111)], ['stage_1', (1, 2)], ['stage_2', (10, 12)]]
性能比較
1.列表理解/壓縮
k, v = zip(*lst)
result = [[k[i], v[i:i+2]] for i in range(0, len(k), 2)]
100000 loops, best of 3: 3.72 μs per loop (using timeit)
2.字典
d = defaultdict(list)
for k, v in lst:
d[k].append(v)
groups = list(map(list, d.items()))
100000 loops, best of 3: 5.85 μs per loop (using timeit)
結果:列表理解速度快約 57%

TA貢獻1807條經驗 獲得超9個贊
有collections.defaultdict對象:
from collections import defaultdict
lst = [['dragon', 11], ['dragon', 111], ['stage_1', 1], ['stage_1', 2], ['stage_2', 10], ['stage_2', 12]]
d = defaultdict(list)
for k, v in lst:
d[k].append(v)
groups = list(map(list, d.items()))
print(groups)
輸出:
[['dragon', [11, 111]], ['stage_1', [1, 2]], ['stage_2', [10, 12]]]

TA貢獻1777條經驗 獲得超3個贊
我認為最好為您的情況使用字典,如下所示
d = { }
for key,value in ls:
d[key] = d.get(key, []) + [value]
print(d)
d.items()如果需要列表,可以使用獲取元組列表
添加回答
舉報