排序和过滤列表

Lucien S.

我有这样的清单:

[['Richard', 1, 'Group A'], ['Mark', 3, 'Group A'],
 ['Alan', 4, 'Group B'], ['Dave', 3, 'Group B'],
 ['Gordon', 2, 'Group A']]

我想进行过滤,以便仅保留每个组中最低的数字(理查德的数字为1,马克为3,艾伦的数字为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)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章