我有这样的列表:
[['Richard', 1, 'Group A'], ['Mark', 3, 'Group A'],
['Alan', 4, 'Group B'], ['Dave', 3, 'Group B'],
['Gordon', 2, 'Group A']]
我想进行过滤,以便仅保留每个组中最小的数字(Richard 的数字为 1,Mark 为 3,Alan 为 4,等等),这样列表将如下所示:
[['Richard', 1, 'Group A'], ['Dave', 3, 'Group B']]
我正在使用 lambda 键进行排序:
filteredList = sorted(list,key=lambda x: x[2])
但是当涉及到在每个组内进行排序并摆脱排名较高的个人时,我受阻了。
有没有一种简单的方法可以在 Python 中实现这一点,或者我应该迭代并测试每一行?
最佳答案
重新键入组名中的数据。不要将您的数据命名为 list
,因为它隐藏了一个内置名称。
>>> results = {}
>>> for name, number, group in data:
... key = group
... value = number, name
... results[key] = min(value, results.get(key, value))
...
>>> [[name, number, group] for group, (number, name) in results.items()]
[['Dave', 3, 'Group B'], ['Richard', 1, 'Group A']]
纯 python 数据结构很好地处理了这个问题,sort/itertools 方法不是最优的并且将复杂度从 O(n) 增加到 O(n logn)。
关于python - 排序和过滤列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42146146/