Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据第一个元素从嵌套列表中删除重复项,同时对列表的长度进行优先级排序?_Python_List_Python 3.x - Fatal编程技术网

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()