Python 使用“从文本文件创建字典”\&引用;分离器

Python 使用“从文本文件创建字典”\&引用;分离器,python,dictionary,Python,Dictionary,我读入了一个.txt文件,并用下面的代码生成了一个列表: infilename = 'aa_data.txt' infile = open(infilename,'r') aa = infile.readlines() aa_info = [] for string in aa: if string[0] == "#": '' else: aa_info.append(string.strip()) aa_info 这给了我这

我读入了一个.txt文件,并用下面的代码生成了一个列表:

infilename = 'aa_data.txt'
infile = open(infilename,'r')
aa = infile.readlines()
aa_info = []
for string in aa:
    if string[0] == "#":
        ''
    else:
        aa_info.append(string.strip())
aa_info
这给了我这个输出(一个.txt文件列表):

然后,我使用以下命令从该列表生成了一个字典:

aa_props = {}
for line in aa_info:
    key = line.split("\t")[0]
    value = line.split("\t")[1:]
    a_dictionary[key] = value
print(a_dictionary)
输出:

{'Ala': ['A', '71.09', 'nan'], 'Arg': ['R', '156.19', '12.0'], 'Asn': ['N', '114.11', 'nan'], 'Asp': ['D', '115.09', '3.5'], 'Cys': ['C', '103.15', '8.6'], 'Gln': ['Q', '128.15', 'nan'], 'Glu': ['E', '129.12', '4.3'], 'Gly': ['G', '57.05', 'nan'], 'His': ['H', '137.14', '6.5'], 'Ile': ['I', '113.16', 'nan'], 'Leu': ['L', '113.16', 'nan'], 'Lys': ['K', '128.17', '10.4'], 'Met': ['M', '131.19', 'nan'], 'Phe': ['F', '147.18', 'nan'], 'Pro': ['P', '97.12', 'nan'], 'Ser': ['S', '87.08', 'nan'], 'Thr': ['T', '101.11', 'nan'], 'Trp': ['W', '186.21', 'nan'], 'Tyr': ['Y', '153.18', '10.4'], 'Val': ['V', '99.14', 'nan'], '': []}
但是我需要把字典分开。我需要的关键是一个字母的氨基酸代码和值是3个字母的氨基酸代码,分子量和电荷。 即,对于第一个字典键和值,我需要它是:

'A': ['Ala', '71.09', 'nan']
当我输入要查找的内容时(我尝试了一些不同的数字变体)创建一个字典:

aa_props = {}
for line in aa_info:
    key = line.split("\t")[1]
    value = line.split("\t")[2:]
    a_dictionary[key] = value
print(a_dictionary)
弹出一个错误:“列表索引超出范围”


有什么想法吗?

这可以通过听写理解在一行中完成:

aa_props={arr[1]:[arr[0]]+arr[2:]用于映射中的arr(lambda x:x.split(“\t”),aa_info)}

这将
[arr[0]]
arr[2::]
连接起来,基本上围绕第一个元素进行切片。

这可以在一行中通过dict理解完成:

aa_props={arr[1]:[arr[0]]+arr[2:]用于映射中的arr(lambda x:x.split(“\t”),aa_info)}
这将
[arr[0]]
arr[2:][/code>连接起来,基本上围绕第一个元素进行切片。

找到了它。
读入数据:

infilename = 'aa_data.txt'
infile = open(infilename,'r')
aa = infile.readlines()  
清理它:

aa_info = []
for string in aa:
        if string[0] == '#':
            ''
        elif string[0] == '\n':
            ''
        else:
            aa_info.append(string.strip())
添加逗号作为分隔符:

aa_info_list = []
for string in aa_info:
    string = string.split('\t')
    aa_info_list.append(string)
创建字典: aa_props={}

for aa in aa_info_list:
    props = [aa[0], float(aa[2]), float(aa[3])]
    aa_props[aa[1]] = props
找到了答案。
读入数据:

infilename = 'aa_data.txt'
infile = open(infilename,'r')
aa = infile.readlines()  
清理它:

aa_info = []
for string in aa:
        if string[0] == '#':
            ''
        elif string[0] == '\n':
            ''
        else:
            aa_info.append(string.strip())
添加逗号作为分隔符:

aa_info_list = []
for string in aa_info:
    string = string.split('\t')
    aa_info_list.append(string)
创建字典: aa_props={}

for aa in aa_info_list:
    props = [aa[0], float(aa[2]), float(aa[3])]
    aa_props[aa[1]] = props

确保
aa_info
没有空条目作为最后一个元素。确保
aa_info
没有空条目作为最后一个元素。不要使用
'
通过第一个for循环中的一行,使用
pass
语句。使用
pass
语句代替通过第一个for循环中的行。