Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将单列文件存储到字典中_Python_File_Dictionary_Key - Fatal编程技术网

Python 将单列文件存储到字典中

Python 将单列文件存储到字典中,python,file,dictionary,key,Python,File,Dictionary,Key,我有一个如下所示的文件: >Organism1 ETTGDMND >Organism2 PDELMESPEER >Organism3 YERLLRRAQ >Organism1 EDLTEVSGIGC 我想创建一个字典,其中大写字母(=氨基酸序列)是键,生物体名称是值。 到目前为止,我已经: dict1 = {} for line in file.readlines(): li

我有一个如下所示的文件:

    >Organism1
    ETTGDMND
    >Organism2
    PDELMESPEER
    >Organism3
    YERLLRRAQ
    >Organism1
    EDLTEVSGIGC
我想创建一个字典,其中大写字母(=氨基酸序列)是键,生物体名称是值。 到目前为止,我已经:

    dict1 = {}
    for line in file.readlines():
        line = line.rstrip() 
        if ">" not in line:        # '>' not in the line=amino acid seq 
            key = line             #assign the line into a variable 'key' 
            dict1[key] = []        #make this variable the keys of dict1
        else:                      #if '>'is in the line = organism
            value = line
            dict1[key] = value  
    print dict1  
它会引发未定义“键”的错误消息。但我认为这是通过说key=line

使用同一输入文件的相关问题。如果我只想调用该文件中的氨基酸序列(出于其他目的),我会:

但它只打印了一个序列而不是所有序列。 有人能帮我吗?
谢谢

由于值总是在键之前,一种简单的方法是“记住”另一个变量中的值,在获取键时可以使用该变量。因此,以下措施应该有效:

dict1 = {}
file = open("somedata.dat")
for line in file:  # note you can leave out readlines() here
    line = line.rstrip()
    if line[0] == ">":    # safer to check just first char
        value = line[1:]  # use [1:] to drop the ">" from the value
    else:
        dict1[line] = value
print dict1
如果在一个值之后有多行氨基酸键,则所有键将使用相同的值

关于第二个问题,问题是这一行:

my_sequences = [line]
始终替换
my_sequences
,而不考虑其先前的值,因此您将得到一个包含最后处理的序列的单项目列表。替换为:

my_sequences.append(line)

它会在列表的末尾添加一个项目,并且它会执行您想要的操作。

键还是值哪个在前?您的第一行是>m1。这意味着代码将跟随
else
分支,其中未定义
key
。啊,这很有意义!是的,很好,这给了我所需要的。谢谢另外一个问题是,除了创建字典,如果我只想调用该文件中的氨基酸序列(出于另一个目的),我还做了我的_序列=[]对于文件中的行:line=line.rstrip()如果“>”不在行中:my_sequences=[line]#将这些dna序列添加到列表中“my_sequences”打印my#sequences#但这只会给我一个序列
my_sequences.append(line)