按dictionary的值对字典列表进行排序?TypeError:字符串索引必须是整数

2024-09-30 20:30:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个Python脚本,允许我在文件中检索一些信息,如e值、登录次数。。。然后我将这些信息存储在字典中

import operator

file = open("4.A.1.1.3.txt", "r")

line = file.readline()

dico_hit = dict()

for line in file :
    if '#' not in line :

        columns = line.split()
        
        query = columns[3]
        
        accession = columns[4]
        
        evalue = columns[6]
        
        hmmfrom = int(columns[15])
        
        hmmto = int(columns[16])
        
        dico_hit[query] = {'Accession' : accession, 'E-value' : evalue,'Hmmfrom' : hmmfrom, 'Hmmto' : hmmto}

以下是我的字典预览:

PTS_EIIB         {'Accession': 'PF00367.21', 'E-value': '4.9e-21', 'Hmmfrom': '2', 'Hmmto': '34'}
PTS_EIIC         {'Accession': 'PF02378.19', 'E-value': '8.9e-92', 'Hmmfrom': '1', 'Hmmto': '324'}

我想按一个字典值(E值)对字典列表进行排序。为此,我使用函数“sorted”

sort_evalue= sorted(dico_hit, key=lambda k: k['E-value'])
print(sort_evalue)

我犯了这样的错误:

TypeError: string indices must be integers

我不明白是什么导致了这个错误?这难道不是正确的方式吗


Tags: columnsin信息字典valuelinequerydico
1条回答
网友
1楼 · 发布于 2024-09-30 20:30:12

dico_hit不是一个列表,它是一个dict,如果您想对它们进行排序,应该使用list。因此,在循环之前:

dico_hit = list()

然后像下面这样附加到列表,而不是dico_hit[query] = {'Ac...

dico_hit.append({'Accession' : accession, 'E-value' : evalue,'Hmmfrom' : hmmfrom, 'Hmmto' : hmmto})

那么sorted函数就可以正常工作了

顺便说一下:

you can not sort dictionary because of their base implementation. for ordering dicts you can use collections.OrderedDict.

相关问题 更多 >