gpt4 book ai didi

python - 根据字符串和值从嵌套列表中删除重复项

转载 作者:太空宇宙 更新时间:2023-11-03 11:28:47 25 4
gpt4 key购买 nike

我有一个这样的列表:

[['john', 14, 'USA'],['john', 27, 'USA'],['paul', 17, 'USA'],['paul', 36, 'USA']]

并且需要得到输出:

[['john', 27, 'USA'],['paul', 36, 'USA']]

这意味着根据位置 0 删除重复项,但将具有较高值的​​保留在位置 1。

我知道如何使用 set() 删除常规列表中的重复项,但我该如何应用这 2 个条件?我在想一些带有 for 的东西,但我可能会很慢,因为我将使用的真实列表非常大。

我已经尝试过仅按名称删除重复项,但我对保留具有较高值的​​名称感到困惑。

谢谢!

最佳答案

您可以使用 itertools.groupby 按第一个索引对元素进行分组,并使用 max 函数和适当的 key 选择最大值第二个元素:

>>> from itertools import groupby
>>> l=[['john', 14, 'USA'], ['john', 27, 'USA'], ['paul', 17, 'USA'], ['paul', 36, 'USA']]
>>> [max(g ,key=lambda x:x[1]) for _,g in groupby(sorted(l),lambda x: x[0])]
[['john', 27, 'USA'], ['paul', 36, 'USA']]

或者作为一种更有效的方式,您可以使用 operators.itemgetter() 代替 lambda :

>>> from operators import itemgetter
>>> [max(g ,key=itemgetter(1)) for _,g in groupby(sorted(l),itemgetter(0))]
[['john', 27, 'USA'], ['paul', 36, 'USA']]

关于python - 根据字符串和值从嵌套列表中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27828999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com