非常感谢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'}发布于 2013-01-19 17:16:00
另一种方式是:
import operator
primers_unsorted.sort(key=operator.itemgetter(' Construct Number', ' Part Number'))
for row in primers_unsorted:
print(row)发布于 2013-01-19 17:23:33
如果您想逐块地执行此操作,可以执行以下操作:
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如果列表很长的话可能会很有用。
发布于 2013-01-21 16:46:51
我的最后一段代码是这样的,它完美地完成了:
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(.),它根据需要接受尽可能多的参数。它以排序(.)的形式传递给'key‘参数。
非常感谢Eric回答我的问题!
https://stackoverflow.com/questions/14416652
复制相似问题