对两列进行综合排序出现了问题

有如下两列数据

img

希望对两列综合排序生成如下结果:

img

本人技术不过关,没有得出理想结果

一部分

img

是取每行的最小值排序吧。

img

li=[
['Glyma.13G081400','Glyma.06G111400'],
['Glyma.13G081600','Glyma.06G111300'],
['Glyma.13G081700','Glyma.06G110800'],
['Glyma.13G082300','Glyma.06G110600'],
['Glyma.13G082800','Glyma.06G110100'],
['Glyma.13G083100','Glyma.06G109800'],
['Glyma.13G083200','-'],
['Glyma.13G082700','-'],
['Glyma.13G081300','-'],
['Glyma.13G082500','-'],
['Glyma.13G082900','-'],
['Glyma.13G081800','-'],
['Glyma.13G083300','-'],
['Glyma.13G082400','-'],
['Glyma.13G082000','-'],
['Glyma.13G082100','-'],
['Glyma.13G082600','-'],
['Glyma.13G081500','-'],
['Glyma.13G083000','-'],
['Glyma.13G081900','-'],
['Glyma.13G082200','-'],
['-','Glyma.06G110000'],
['-','Glyma.06G109600'],
['-','Glyma.06G109700'],
['-','Glyma.06G110900'],
['-','Glyma.06G111600'],
['-','Glyma.06G110300'],
['-','Glyma.06G111000'],
['-','Glyma.06G111500'],
['-','Glyma.06G110400'],
['-','Glyma.06G110500'],
['-','Glyma.06G111200'],
['-','Glyma.06G110700'],
['-','Glyma.06G111100'],
['-','Glyma.06G109900'],
['-','Glyma.06G110200'],
]
def f(d):
    if d[0]=='-':
        return d[1]
    elif d[1]=='-':
        return d[0]
    else:
        return min(d)

li.sort(key=f)
for v in li:
    print(v)

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

可以截图看看这两列数据吗,贴出来的数据有点乱,.和-不知道表示什么

你读取数据时直接存储数据成一个二维数组,对二维数据进行排序就可以了。
排序的时候需要重写一下排序的规则。
你的规则应该是取当前行有效值里面的最小值。自定义以下行比较函数就可以了。然后直接用list字段的sort方法即可。

def my_compare(l1,l2):
    k1=min(set(l1) - set(('-')))
    k2=min(set(l2) - set(('-')))
    if k1>k2:
        return 1
    elif k1<k2:
        return -1
    return 0

完整代码可以参考下面的。

import functools

def my_compare(l1,l2):
    k1=min(set(l1) - set(('-')))
    k2=min(set(l2) - set(('-')))
    if k1>k2:
        return 1
    elif k1<k2:
        return -1
    return 0
 
l=[
    ['Glyma.13G081400', 'Glyma.06G111400'],
    ['Glyma.13G081600', 'Glyma.06G111300'],
    ['Glyma.13G081700', 'Glyma.06G110800'],
    ['Glyma.13G083200', '-'],
    ['Glyma.13G082700', '-'],
    ['Glyma.13G081300', '-'],
    ['Glyma.13G082500', '-'],
    ['Glyma.13G082900', '-'],
    ['Glyma.13G081800', '-'],
    ['Glyma.13G082300', 'Glyma.06G110600'],
    ['Glyma.13G082800', 'Glyma.06G110100'],
    ['Glyma.13G083100', 'Glyma.06G109800']
]

l.sort(key=functools.cmp_to_key(my_compare))

[print(x) for x in l]

img