我有这样的清单:
[['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] 删除。
我来说两句