よくある話だとは思うのですが二次元配列
A=[['001','1'],['001','2'],['002','1'],['002','3'],['001','3'],['002','2'],['002','4']]
こういうものから各要素の[0]
をキーとして、キーごとの[1]
の最大値を求めたい場合のロジックを考えます。
上記の場合だと、[['001', '3'], ['002', '4']]
が導き出したい答えです。
# 二次元配列[[key, value], [key, value], ...]
input_list=[['001','1'],['001','2'],['002','1'],['002','3'],['001','3'],['002','2'],['002','4']]# 各要素のkeyを取得して重複削除
keys=list(set(i[0]foriininput_list))tmp_dict={}forkinkeys:# 要素のkeyが一致するvalueをリスト化
v_l=list(set([i[1]ifi[0]==kelse0foriininput_list]))# key: valueの辞書型で保持
tmp_dict.update({k:v_l})print(tmp_dict)# {'001': [0, '3', '1', '2'], '002': [0, '3', '4', '1', '2']}
output_list=[]forkintmp_dict.keys():# 各keyが保持するvalueの最大値を取得しリスト化
output_list.append([k,max(tmp_dict[k],key=int)])print(output_list)# [['001', '3'], ['002', '4']]
というわけでキーごとの最大値が求められました。