我有一个列表列表:
list_1 = [['1','a'],['1','b'],['1','c'],['2','a'],['2','d'], ['1','c']]
当按第一个值分组时,如何遍历列表以将第二个值附加到另一个列表。所以看起来像这样:
list_2 = [['a','b','c','c'],['a','d']]
答案 0 :(得分:1)
一种方法是分两个步骤-首先,在list_1
中找到唯一的“键”,然后根据这些键将list_1
过滤到多个列表中。
unique_keys = set(elem[0] for elem in list_1)
list_2 = [[elem[1] for elem in list_1 if elem[0] == key]
for key in unique_keys]
# [['a', 'd'], ['a', 'b', 'c', 'c']]
该集合按给定key
的最后出现顺序排序,这就是为什么输出比预期的要落后的原因。要解决此问题,请改用set(elem[0] for elem in reversed(list_1))
。
答案 1 :(得分:1)
使用defaultdict
。
from collections import defaultdict
res=defaultdict(list)
for key,val in list_1:
res[key]+=val
#res looks like this {'1': ['a', 'b', 'c', 'c'], '2': ['a', 'd']}
print(list(res.values())) # [['a', 'b', 'c', 'c'], ['a', 'd']]