Skip to main content
 首页 » 编程设计

python从多个列表中选择具有引用的最低字母数字值

2025年05月04日14sharpest

我有多个这样的列表:

#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) 

结果为 False。

我认为逻辑是将它们制成如下所示的列表并比较字母数字 ID 并选择最低的。

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

然而,我现在完全迷失和沮丧......

你能帮我解决这个问题吗?

============================================= 大家帮帮我真是太好了! 但是,必须考虑 ID 的长度。 例如,每个人都给我 BBB wih MG_00080,但它假设 MG_0045 因为 45 小于 80...

请您参考如下方法:

我认为像字典这样的东西可能会更好,但这会给出你预期的输出。

import itertools 
 
listoflists =[['AAA','MG_00013'],['AAA','MG_00177'],['AAA','MG_00005'],['BBB','MG_0045'],['BBB','MG_00080'],['CCC','MG_0002']] 
 
minlists = [ 
    min(value, key=lambda lst: lst[1]) 
    for _, value in itertools.groupby(listoflists, lambda lst: lst[0]) 
] 
print minlists 

输出

[['AAA', 'MG_00005'], ['BBB', 'MG_00080'], ['CCC', 'MG_0002']] 

编辑:我不清楚 id 的比较,但要比较它们伪数字(不是字典顺序),请将 key=lambda lst: lst[1] 替换为

key=lambda lst: int(lst[1][3:])