Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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 3.x 在python 3中合并多个列表_Python 3.x_List_Dictionary - Fatal编程技术网

Python 3.x 在python 3中合并多个列表

Python 3.x 在python 3中合并多个列表,python-3.x,list,dictionary,Python 3.x,List,Dictionary,假设我有多个列表,我将在本例中包括其中三个列表的缩短版本 list1=[['name', '1A5ZA'], ['length', 83], ['A', 28], ['V', 31], ['I', 24]] list2=[['name', '1AJ8A'], ['length', 49], ['A', 18], ['V', 11], ['I', 20]] list3=[['name', '1AORA'], ['length', 96], ['A', 32], ['V', 49], ['I', 1

假设我有多个列表,我将在本例中包括其中三个列表的缩短版本

list1=[['name', '1A5ZA'], ['length', 83], ['A', 28], ['V', 31], ['I', 24]]
list2=[['name', '1AJ8A'], ['length', 49], ['A', 18], ['V', 11], ['I', 20]]
list3=[['name', '1AORA'], ['length', 96], ['A', 32], ['V', 49], ['I', 15]]
所有列表的格式都相同:它们具有相同数量的嵌套列表和相同的标签

我使用以下函数生成每个列表

def GetResCount(sequence):  
    residues=[['A',0],['V',0],['I',0],['L',0],['M',0],['F',0],['Y',0],['W',0],
    ['S',0],['T',0],['N',0],['Q',0],['C',0],['U',0],['G',0],['P',0],['R',0],
    ['H',0],['K',0],['D',0],['E',0]]

    name=sequence[0:5]
    AAseq=sequence[27:]
    for AA in AAseq:
        for n in range(len(residues)):
            if residues[n][0] == AA:
                residues[n][1]=residues[n][1]+1
    length=len(AAseq)
    nameLsit=(['name', name])
    lengthList=(['length', length])
    residues.insert(0,lengthList)
    residues.insert(0,nameLsit)
    return residues
脚本采用如下顺序

1A5ZA:A|PDBID|CHAIN|SQUENCEMKIGIVGLGRVGSSTAFAL
并将创建一个类似于上面提到的列表。 在生成每个单独的列表时,我希望将其附加到最终表单中,以便所有列表组合在一起如下所示:

final=[['name', '1A5ZA', '1AJ8A', '1AORA'], ['length', 83, 49, 96], ['A', 28, 18, 32], ['V', 31, 11, 49], ['I', 24, 20, 15]]
name    length  A   V   I
1A5ZA     83    28  31  24
1AJ8A     49    18  11  20
1AORA     96    32  49  15
可能数据的最终格式不正确。我愿意接受关于如何更好地格式化最终表格的建议

总之,脚本应该做的是获得一个字母序列,序列的名称在开头,使用序列以及整个序列长度计算每个字母的出现次数,并将名称长度和字母频率输出到列表中。然后它应该将每个序列中的信息合并到一个更大的列表中(可能是字典?)

最后,所有这些信息都将进入一个电子表格,如下所示:

final=[['name', '1A5ZA', '1AJ8A', '1AORA'], ['length', 83, 49, 96], ['A', 28, 18, 32], ['V', 31, 11, 49], ['I', 24, 20, 15]]
name    length  A   V   I
1A5ZA     83    28  31  24
1AJ8A     49    18  11  20
1AORA     96    32  49  15
我把最后一点也包括在内,因为也许我没有以正确的方式开始,以我想要的结束

反正,
我希望你能来这里,谢谢你的帮助

因此,如果您正在寻找一个表,那么使用
dict
可能是更好的方法。(注意:
collections.计数器的作用与您的计数相同),例如:

从集合导入计数器
def GetResCount(顺序):
名称,AAseq=序列[0:5],序列[27:]
残差={'name':name,'length':len(AAseq),'A':0,'V':0,'I':0,'L':0,
'M':0,'F':0,'Y':0,'W':0,'S':0,'T':0,'N':0,'Q':0,'C':0,
'U':0,'G':0,'P':0,'R':0,'H':0,'K':0,'D':0,'E':0}
残差。更新(计数器(AAseq))
返回残差
在[]中:
GetResCount('1A5ZA:A | PDBID | CHAIN | SQUENCEMKIGIVGLGRVGSSTAFAL')
出[]:
{'name':'1A5ZA','length':19,'A':2,'V':2,'I':2,'L':2,'M':1,'F':1,'Y':0,
“W':0,'S':2,'T':1,'N':0,'Q':0,'C':0,'U':0,'G':4,'P':0,'R':1,
'H':0,'K':1,'D':0,'E':0}
注意:这可能只是您在Py3.6+中可能看到的顺序,但如果需要,我们可以在稍后创建表时解决这个问题

然后您可以创建一个目录列表,例如(假设您正在从文件中读取这些行):

您也可以使用
cvs.DictWriter()
将其转储到一个文件中:


您的
final
格式很有表现力,您可以在
zip(*final)
中循环,然后您可以打印结果或将结果写入文本文件、csv等。。。
from csv import DictWriter

fieldnames = ['name', 'length', 'A', 'V', 'I', ...]
with open(<output>, 'w') as file:
    writer = DictWrite(file, fieldnames)
    writer.writerows(data)
name,length,A,V,I,...
1A5ZA,83,28,31,24,...
1AJ8A,49,18,11,20,...
1AORA,96,32,49,15 ...
...