我有多个这样的列表:
#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:])
关于python从多个列表中选择具有引用的最低字母数字值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19750589/