1

次のような複数のリストがあります。

#Symbol  ID
['AAA','MG_00013']
['AAA','MG_00177']
['AAA','MG_00005']
['BBB','MG_0045']
['BBB','MG_00080']
['CCC','MG_0002'] # and so on...

IDが最も小さい同じシンボルのリストを選択したいと思います。

したがって、最終結果は次のようになります。

#Symbol  ID
['AAA','MG_00005']
['BBB','MG_0045']
['CCC','MG_0002'] #...

そのために、それらをリストのリストにしました

listoflists =[['AAA','MG_00013'],['AAA','MG_00177'],['AAA','MG_00005'],['BBB','MG_0045'],['BBB','MG_00080'],['CCC','MG_0002']]

ここから道に迷った…

for i in listoflists:
if i[0] == i[0]:
    test.append(i[1])

for i in test:
    print(i)

これは偽の結果をもたらします。

以下のようなリストにして、英数字のIDを比較して一番低いものを選ぶというのがロジックだと思います。

[(AAA,['MG_00013','MG_00177','MG_00005'])]

しかし、私は今完全に迷ってイライラしています...

この問題を解決するのを手伝ってくれませんか?

============================================== 助けてくれるみんなアウトはとても素晴らしいです!ただし、ID の長さを考慮する必要があります。たとえば、みんなが MG_00080 で BBB をくれますが、45 は 80 より小さいので MG_0045 と仮定します...

4

4 に答える 4

2

これは良い場所ですdefaultdict

from collections import defaultdict

D = defaultdict(list)
for k,v in listoflists:
    D[k].append(v)

return [[k, min(D[k])] for k in D]
于 2013-11-03T07:08:58.357 に答える