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

标签 python list comparison tuples

我有多个这样的列表:

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

相关文章:

python - 如何使用 distutils 安装到特定的 Python 安装?

python - m1 mac 上的 pycharm 调试失败,出现 : `pydevd_cython_darwin_310_64.cpython-310-darwin.so incompatible architecture`

python - 用条纹数替换字符串

python - 为什么我不能在创建列表后立即对其进行排序?

c - 需要在 C 中实现通用列表,避免插入时重复

javascript - 哪种循环结构可以将复选框矩阵与 Google map 标记进行比较?

python - BS4 从所有 DIV 标签中获取文本,但不包括子标签

python - 将多处理队列/字典/等传递给绿色线程

OCaml中具有特定长度的列表的列表

java - 比较两个文档,父元素和子元素的排序不同