gpt4 book ai didi

python - 字典排序操作出错

转载 作者:太空宇宙 更新时间:2023-11-04 05:49:56 24 4
gpt4 key购买 nike

我正在尝试根据特定参数对序列文件进行排序。数据如下所示:

ID1 ID2 32

MVKVYAPASSANMSVGFDVLGAAVTP ...

ID1 ID2 18

MKLYNLKDHNEQVSFAQAVTQGLGKN ...

....

大约有 3000 个这样的序列,即第一行包含两个 ID 字段和一个等级字段(排序键),而第二行包含序列。我的方法是打开文件,将文件对象转换为列表对象,将注释行(ID1,ID2,等级)与实际序列分开(注释行总是出现在偶数索引上,而序列行总是出现在奇数索引上) ,将它们合并到一个字典中,并使用 rank 字段对字典进行排序。代码如下所示:

#!/usr/bin/python

with open("unsorted.out","rb") as f:
f = f.readlines()

assert type(f) == list, "ERROR: file object not converted to list"

annot=[]
seq=[]

for i in range(len(f)):
# IDs
if i%2 == 0:
annot.append(f[i])
# Sequences
elif i%2 != 0:
seq.append(f[i])

# Make dictionary
ids_seqs = {}
ids_seqs = dict(zip(annot,seq))

# Solub rankings are the third field of the annot list, i.e. annot[i].split()[2]
# Use this index notation to rank sequences according to solubility measurements

sorted_niwa = sorted(ids_seqs.items(), key = lambda val: val[0].split()[2], reverse=False)

# Save to file
with open("sorted.out","wb") as out:
out.write("".join("%s %s" % i for i in sorted_niwa))

我遇到的问题是,当我打开排序的文件进行手动检查时,当我向下滚动时,我注意到一些序列被错误地排序了。例如,我看到第 9 位排在第 89 位之后。直到某一点排序是正确的,但我不明白为什么它一直没有奏效。

非常感谢您的帮助!

最佳答案

听起来您比较的是字符串而不是数字。 "9"> "89"因为字符 '9' 按字典顺序排在字符 '8' 之后。尝试在您的 key 中转换为整数。

sorted_niwa = sorted(ids_seqs.items(), key = lambda val: int(val[0].split()[2]), reverse=False)

关于python - 字典排序操作出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30732701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com