python - 排序和过滤列表

标签 python list sorting

我有这样的列表:

[['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/

相关文章:

python - 一个阵列轴的快速插补

Python 3 : How to search for a list created from a user's input?

python - 根据Python中包含的字母顺序分割同一个列表

java - 树形图到数组。数组是否保持顺序?

Python:对列的子部分进行排序

python - 使用 python 3 在电子邮件中嵌入 Pandas df html 表

python - 列表总和,不改变列表pandas的长度

Php 得到这样一个数组的结果

Unix 版本号排序

Python套接字在使用pygame时只接收一次输入