Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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_List_Sorting_Dna Sequence - Fatal编程技术网

如何在python中进行子排序?

如何在python中进行子排序?,python,list,sorting,dna-sequence,Python,List,Sorting,Dna Sequence,非常感谢SO社区帮助我解决以前遇到的问题。我喜欢这里的帮助 我现在还有一个问题。我有一个与“构造编号”和“零件编号”相关联的DNA序列的平面列表。目前,从我以前的代码来看,我将其作为csv文件,打开、读入并导入为字典对象列表。所有内容都已按“构造编号”排序,但我需要按“零件编号”排序。(这有点像在Excel中,他们说“首先按排序,然后按排序” 有人知道如何做到这一点吗?到目前为止,我只写了以下内容: primers_list = open('primers-list.csv', 'rU') pr

非常感谢SO社区帮助我解决以前遇到的问题。我喜欢这里的帮助

我现在还有一个问题。我有一个与“构造编号”和“零件编号”相关联的DNA序列的平面列表。目前,从我以前的代码来看,我将其作为csv文件,打开、读入并导入为字典对象列表。所有内容都已按“构造编号”排序,但我需要按“零件编号”排序。(这有点像在Excel中,他们说“首先按排序,然后按排序”

有人知道如何做到这一点吗?到目前为止,我只写了以下内容:

primers_list = open('primers-list.csv', 'rU')
primers_unsorted = csv.DictReader(primers_list)
for row in primers_unsorted:
    print(row)
到目前为止,输出的一个子集如下所示,用于可视化我正在处理的数据:

{' Direction': 'fw primer', ' Construct Number': '1', ' Part Number': '2', 'Primer Sequence': 'AAGCGGCCGCTCGAGTCTAAgctcactcaaaggcggtaatcagataaaaaaaatccttag'}
{' Direction': 're primer', ' Construct Number': '1', ' Part Number': '1', 'Primer Sequence': 'attaccgcctttgagtgagcTTAGACTCGAGCGGCCGCTTTTTGACACCAGACCAACTGG'}
{' Direction': 'fw primer', ' Construct Number': '1', ' Part Number': '1', 'Primer Sequence': 'TTTAATTACTAACTTTATCTATGATAGATCCCGTCGTTTTACAACGTCGTGACTGGGAAA'}
{' Direction': 're primer', ' Construct Number': '1', ' Part Number': '2', 'Primer Sequence': 'AAAACGACGGGATCTATCATAGATAAAGTTAGTAATTAAACTTAAAAGTTGTTTAATGTC'}
{' Direction': 'fw primer', ' Construct Number': '2', ' Part Number': '2', 'Primer Sequence': 'gtaaatccaagttgtaataatactagagTAGCATAACCCCTTGGGGCCTCTAAACGGGTC'}
{' Direction': 're primer', ' Construct Number': '2', ' Part Number': '1', 'Primer Sequence': 'GGGGTTATGCTActctagtattattacaacttggatttaccacctttcttcgccttgatc'}
{' Direction': 'fw primer', ' Construct Number': '2', ' Part Number': '1', 'Primer Sequence': 'TACGACTCACTATAGGGAGAtactagagttaaggaggtaaaaaaaatgggtccggtcgtt'}
{' Direction': 're primer', ' Construct Number': '2', ' Part Number': '2', 'Primer Sequence': 'ttacctccttaactctagtaTCTCCCTATAGTGAGTCGTATTACTCTAGAAGCGGCCGCg'}
{' Direction': 'fw primer', ' Construct Number': '3', ' Part Number': '2', 'Primer Sequence': 'gtaaatccaagttgtaataatactagagTAGCATAACCCCTTGGGGCCTCTAAACGGGTC'}
{' Direction': 're primer', ' Construct Number': '3', ' Part Number': '1', 'Primer Sequence': 'GGGGTTATGCTActctagtattattacaacttggatttaccacctttcttcgccttgatc'}
{' Direction': 'fw primer', ' Construct Number': '3', ' Part Number': '1', 'Primer Sequence': 'TAACTATCACTATAGGGAGAtactagagttaaggaggtaaaaaaaatgggtccggtcgtt'}
{' Direction': 're primer', ' Construct Number': '3', ' Part Number': '2', 'Primer Sequence': 'ttacctccttaactctagtaTCTCCCTATAGTGATAGTTATTACTCTAGAAGCGGCCGCg'}
另一种方式:

import operator
primers_unsorted.sort(key=operator.itemgetter(' Construct Number', ' Part Number'))

for row in primers_unsorted:
    print(row)
另一种方式:

import operator
primers_unsorted.sort(key=operator.itemgetter(' Construct Number', ' Part Number'))

for row in primers_unsorted:
    print(row)

如果要逐块执行,可以执行以下操作:

a=0
while a<len(primers_list):
    b=a
    current_construct=primers_list['Construct Number']
    while primers_list[b]['Construct Number']==current_construct:
         b=b+1
    primers_list[a:b]=sorted( primers_list[a:b] , key = lambda e: (e[' Construct Number'],e[' Part Number']))
    a=b
a=0

而如果要逐块执行,可以执行以下操作:

a=0
while a<len(primers_list):
    b=a
    current_construct=primers_list['Construct Number']
    while primers_list[b]['Construct Number']==current_construct:
         b=b+1
    primers_list[a:b]=sorted( primers_list[a:b] , key = lambda e: (e[' Construct Number'],e[' Part Number']))
    a=b
a=0

而我的最终代码是这样的,它运行得非常完美:

primers_list = open('primers-list.csv', 'rU')
primers_unsorted = csv.DictReader(primers_list)
primers_sorted = sorted(primers_unsorted, key=operator.itemgetter('Construct Number', 'Part Number'))
for row in primers_sorted:
    print(row)
关键(请原谅这个双关语)是使用operator.itemgetter(…),它可以根据需要接受尽可能多的参数。它被传递到sorted(…)中的“key”参数中


非常感谢您回答我的问题!

我的最终代码是这样的,它运行得非常完美:

primers_list = open('primers-list.csv', 'rU')
primers_unsorted = csv.DictReader(primers_list)
primers_sorted = sorted(primers_unsorted, key=operator.itemgetter('Construct Number', 'Part Number'))
for row in primers_sorted:
    print(row)
关键(请原谅这个双关语)是使用operator.itemgetter(…),它可以根据需要接受尽可能多的参数。它被传递到sorted(…)中的“key”参数中


非常感谢您回答我的问题!

为什么您所有的标题都以空格开头?这是我代码中的一个人工制品,我修正了它以去除所有空格。为什么您所有的标题都以空格开头?这是我代码中的一个人工制品,我修正了它以去除所有空格。+1:我忘记了
itemgetter
支持rts multiple Arguments我刚刚尝试过,但Python shell返回以下错误消息:
AttributeError:DictReader实例没有属性“sort”
@ericmjl:Whoops,我想我忘了它实际上不是一个dict列表。只需使用
primers\u sorted=sorted(primers\u unsorted,key=…)
而不是+1:我忘记了
itemgetter
支持多个参数的事实我刚刚尝试过,但Python shell返回以下错误消息:
AttributeError:DictReader实例没有属性“sort”
@ericmjl:Whoops,我想我忘了它实际上不是dict的列表。只需使用
primers_sorted=sorted(primers_unsorted,key=…)
取而代之