前回の質問は解決したのですが、新たにオプションをつけたく
質問させていただきます。
python
1import itertools 2import operator 3 4 5src = [('a', 'b', '97.4'), ('a', 'c', '69.3'), ('a', 'd', '100'), ('a', 'f', '95.9'), ('a', 'p', '68.9'), ('b', 'd', '64.7'), ('b', 'f', '191'), ('b', 'v', '213')] 6dst = [] 7for _, it in itertools.groupby(src, key=operator.itemgetter(0)): 8 m = max(it, key=lambda e: float(e[-1])) 9 dst.append(m) 10 11print(dst) 12
python
1from collections import defaultdict 2 3lst = [('a', 'b', '97.4'), ('a', 'c', '69.3'), ('a', 'd', '100'), ('a', 'f', '95.9'), ('a', 'p', '68.9'), ('b', 'd', '64.7'), ('b', 'f', '191'), ('b', 'v', '213')] 4d = defaultdict(list) 5for x in lst: 6 d[x[0]].append(x) 7result = [max(x, key=lambda x:float(x[2])) for x in d.values()] 8print(result) 9
どちらのコードでも同じ結果が返ってきました。
非常に助かりました。ありがとうございます。
python
1[('a', 'd', '100'), ('b', 'v', '213')]
しかし、データを解析しているとこのように
python
1 2 new_list = [('a', 'b', '100'),('a', 'b', '100'), ('a', 'c', '69.3'), ('a', 'd', '100'), ('a', 'f', '95.9'), ('a', 'p', '68.9'), ('b', 'd', '64.7'), ('b', 'f', '191'), ('b', 'v', '213')] 3
('a', 'b', '100'),('a', 'd', '100')といった同じaを持つ最大値のペアが出てきてしまいました。
この場合、抽出されるのは('a', 'b', '100')のみです。
これを('a', 'b', '100'),('a', 'd', '100')のどちらも抽出したく、質問させていただきます。
宜しくお願い致します。****
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/08 01:51
2019/06/08 02:31
2019/06/08 02:32
2019/06/08 08:17
2019/06/08 09:05