我有一个包含子列表的列表,并希望根据一个公共值对它们进行分组。
例如:
my_list = [["John", 1], ["Mark", 3], ["Peter", 5], ["Mark", 6], ["Mark", 33], ["John", 2]]
我想根据第一个值(名称)对它们进行分组。理想的结果将是:
grouped_list = [[["John", 1], ["John", 2]], [["Mark", 3], ["Mark", 6], ["Mark", 33]], [["Peter", 5]]]
答案 0 :(得分:4)
由于只希望按每个子列表的第一个元素分组,因此必须提供自定义键。
import itertools
[list(g) for _, g in itertools.groupby(sorted(my_list), lambda x: x[0])]
输出:
[[['John', 1], ['John', 2]],
[['Mark', 3], ['Mark', 6], ['Mark', 33]],
[['Peter', 5]]]
答案 1 :(得分:1)
好问题。我更喜欢@ user3483203使用itertools.groupby
的答案,但这是没有导入的解决方案;
result = []
name_to_index = {}
for l in my_list:
if l[0] in name_to_index:
result[name_to_index.get(l[0])].append(l)
else:
result.append([l])
name_to_index[l[0]] = len(result) - 1
输出:
[[['John', 1], ['John', 2]], [['Mark', 3], ['Mark', 6], ['Mark', 33]], [['Peter', 5]]]