我想通过仅保留元素2中具有最小值的列表来生成唯一ID的列表。
例如,给定列表:
list1 = [['Id1', 1, 40],['Id1', 2, 30],['Id2', 10,40]]`
预期产出:
[['Id1', 1, 40],['Id2', 10,40]]
这是我的工作示例,但它非常笨重。我认为可以用一个列表理解来完成。
list1 = [['Id1', 1, 40],['Id1', 2, 30],['Id2', 10,40]]
unique_list = list(set([x[0] for x in list1]))
unique_list = [[x] for x in unique_list]
for x in unique_list:
id = x[0]
min_val = min([y[1:] for y in list1 if y[0] == id])
x.extend(min_val )
print unique_list
答案 0 :(得分:1)
您可以使用itertools.groupby
按子列表中的第一个元素进行分组,您可以使用min
参数获取key
,以按子列表中的其余元素进行排序。 / p>
>>> from itertools import groupby
[min(list(g), key = lambda i: i[1:]) for k, g in groupby(list1, lambda i: i[0])]
[['Id1', 1, 40], ['Id2', 10, 40]]
答案 1 :(得分:0)
一种非常天真的方法,但很容易理解。
list1 = [['Id1', 1, 40],['Id1', 2, 30],['Id2', 10,40]]
unique_list = []
for list_element in list1:
appendable = True
for temp_list in unique_list:
if list_element[0] == temp_list[0]:
if temp_list[1] < list_element[1]:
appendable = False
else:
unique_list.remove(temp_list)
if appendable == True:
unique_list.append(list_element)
unique_list.sort()
print unique_list