私はこのようなリストを持っています:
[['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']]
ラムダキーで並べ替えています:
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]
コメントを追加