Python 如何根据第一个元素从嵌套列表中删除重复项,同时对列表的长度进行优先级排序?
我有一张这样的清单Python 如何根据第一个元素从嵌套列表中删除重复项,同时对列表的长度进行优先级排序?,python,list,python-3.x,Python,List,Python 3.x,我有一张这样的清单 [[7, 6, 8], [1, 10], [3, 10], [7, 8], [7, 4], [9, 4], [5, 8], [9, 8]] 我希望输出像这样: [[7, 6, 8],[1, 10],[3, 10],[9, 4],[5, 8]] 其中,算法应根据内部列表中的第一个元素删除重复项,如'7'、'1'、'3'等。同时优先考虑内部列表的长度,即应首先删除较短的元素 我发现了一些类似的东西,关于如何使用以下内容完成问题的第一部分: dict((x[0], x) for
[[7, 6, 8], [1, 10], [3, 10], [7, 8], [7, 4], [9, 4], [5, 8], [9, 8]]
我希望输出像这样:
[[7, 6, 8],[1, 10],[3, 10],[9, 4],[5, 8]]
其中,算法应根据内部列表中的第一个元素删除重复项,如'7'、'1'、'3'
等。同时优先考虑内部列表的长度,即应首先删除较短的元素
我发现了一些类似的东西,关于如何使用以下内容完成问题的第一部分:
dict((x[0], x) for x in any_list).values()
但是我不知道如何区分长度的优先级。您可以使用
集合。defaultdict()
为了根据第一项对列表进行分类,他们使用max()
函数和len()
作为键选择较长的一项:
>>> lst = [[7, 6, 8], [1, 10], [3, 10], [7, 8], [7, 4], [9, 4], [5, 8], [9, 8]]
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>>
>>> for i, *j in lst:
... d[i].append(j)
...
>>> d
defaultdict(<class 'list'>, {1: [[10]], 3: [[10]], 9: [[4], [8]], 5: [[8]], 7: [[6, 8], [8], [4]]})
>>> [[k] + max(v, key=len) for k, v in d.items()]
[[1, 10], [3, 10], [9, 4], [5, 8], [7, 6, 8]]
您可以使用
sorted(any_list,key=len)
按长度对列表进行排序
您的代码可能如下所示:
dict((x[0], x) for x in sorted(any_list, key=len)).values()
如果您希望最后有一个列表,只需将结果传递到
list()
如果重复项长度相同,并且内部列表的顺序不重要,您真的不在乎应该删除哪个内部列表吗?如果是这样,请先按内部列表的长度对外部列表进行排序:然后删除重复项,如您所述。
dict((x[0], x) for x in sorted(any_list, key=len)).values()