<p>首先,我看不出原始循环有什么不好的地方(可以将其转换为函数,并使用<a href="https://www.python.org/dev/peps/pep-0343/" rel="nofollow">^{<cd1>} context manager</a>进行缩短)。但是,我提到了<code>csv</code>模块,因为它似乎几乎可以满足您的要求,不需要<code>DictWriter</code>。你知道吗</p>
<p>我假设你是这样开始的:</p>
<pre><code>In [4]: key_genes
Out[4]:
{'key1': ['AT3G32920',
'AT3G33187',
'AT3G32940',
'AT3G32930',
'AT3G32980',
'AT3G32960'],
'key2': ['AT3G32920', 'AT3G33187', 'AT3G32940', 'AT3G32930'],
'key3': ['AT3G32920',
'AT3G33187',
'AT3G32940',
'AT3G32930',
'AT3G32980',
'AT3G32960'],
'key4': ['AT3G32920', 'AT3G33187', 'AT3G32940', 'AT3G32930']}
</code></pre>
<p>所以这个代码:</p>
<pre><code>with open('out.csv', 'wb') as outfile:
writer = csv.writer(outfile)
for key, genes in key_genes.iteritems():
writer.writerow([key] + genes)
</code></pre>
<p>产生以下结果:</p>
<pre><code>key3,AT3G32920,AT3G33187,AT3G32940,AT3G32930,AT3G32980,AT3G32960
key2,AT3G32920,AT3G33187,AT3G32940,AT3G32930
key1,AT3G32920,AT3G33187,AT3G32940,AT3G32930,AT3G32980,AT3G32960
key4,AT3G32920,AT3G33187,AT3G32940,AT3G32930
</code></pre>
<p>显然<del>如果您想对密钥进行排序,您可以这样做</del>您的密钥将被排序,因为您使用的是有序结构,而我使用的是一个常规的内置dict。现在我们进入您需求的<em>几乎</em>部分。您正在使用<code>,\t</code>作为分隔符。如果您尝试用<code>csv.writer</code>执行此操作,它会抱怨分隔符应该是一个字符。这对我来说很有意义,因为csv文件通常是逗号分隔或制表符分隔的,而不是两者都是。分隔符只是为了便于机器处理而存在的,机器只需要一个字符(在其他任何地方都不需要引号)。你知道吗</p>
<p>因此,我的最终答案是:如果您可以使用单字符分隔符(对于正常的CSV处理,这应该不是问题),请使用<code>csv</code>模块。否则,使用短循环。你知道吗</p>