我目前有一份列表字典。我试图将它们写入输出,使得每个字典键都是一列,每个相应的列表将填充该列,该列的每一行都是列表中的不同元素。我觉得这应该是一个简单的问题,但我似乎无法正确地绕过它,因为我采取的每种方法都会产生错误的输出。
所以我想尝试这样的事情:
{'name1': ['a', 'b', 'c'], 'name2': [f, m, n], 'name3': [a, c, e]}
打印出来像这样:
name1 <tab> name2 <tab> name3 <tab>...
a <tab> f <tab> a <tab>...
b <tab> m <tab> c <tab>...
c <tab> n <tab> e <tab>...
以下是我编写的代码,它肯定没有正确执行...第一列总是以最多行填充,然后是第二列,依此类推:
outdict = {}
for name, mylist in newdict.iteritems():
mylist = sorted(mylist)
for x in range(0, len(mylist)):
if x not in outdict:
outdict[x] = []
if x == 0:
outdict[x].append(gene)
else:
outdict[x].append(mylist[x])
for a, b in outdict.iteritems():
out = "\t".join(b)
print out
有人建议这个问题已经回答here但是当我实现建议的代码时,它仍然没有产生正确的输出,实际上它将整个输出只放在两行中(字典键在一行中)行和第二行中的字典值。)
import csv
with open("test.tsv", "wb") as file:
writer = csv.writer(file, delimiter='\t')
writer.writerow(newdict.keys())
for row in zip(*newdict.values()):
writer.writerow(list(row))
writer.writerow("\n")
最终更新/解决方案: 只是想让每个人都知道,即使这个问题被错误地标记为重复,用户指向我没有解决问题的代码,我最终能够使用Pandas很容易地解决问题(正如其他人建议我看到的那样) )。这是我使用的代码:
import pandas as pd
dataframe1 = pd.DataFrame(dict([(k,pd.Series(v)) for k, v in newdict.iteritems()]))
dataframe1.to_csv("testing.tsv", sep="\t")
这非常有效,我还了解到我也可以使用pandas直接导出到Excel格式。我期待着更加熟悉熊猫。谢谢!