Python 将defaultdict(列表)写入文件

Python 将defaultdict(列表)写入文件,python,python-2.7,defaultdict,Python,Python 2.7,Defaultdict,我以前问过一个问题 虽然我确实根据代码获得了所需的输出,但我很难将其作为表格写入文件中 count pos _pos _neg 31022550 31022550 31022550 31022550 ID: 代码 我会这样做(python 2): 您需要一个双循环来迭代每个键的列表。我已经将列名存储在一个列表中,因此我可以重用它来构建列表中的行&对于标题也是如此(第一项没有标题,我只是将其留空) 现在看起来是这样的: count

我以前问过一个问题

虽然我确实根据代码获得了所需的输出,但我很难将其作为表格写入文件中

         count pos _pos _neg
31022550     
31022550    
31022550    
31022550
ID:

代码 我会这样做(python 2):

您需要一个双循环来迭代每个键的列表。我已经将列名存储在一个列表中,因此我可以重用它来构建列表中的行&对于标题也是如此(第一项没有标题,我只是将其留空)

现在看起来是这样的:

        count   pos     _pos    _neg
31022550        0       20      0       0
31022550        2       20      2       0
31022550        0       20      0       0
(由于制表符不够宽,所以稍微有点移位,但不存在读回的问题)

Python 3用户必须更改:

with open('mycsvfile.csv', 'wb') as f:

请注意,
writerow
双循环可以被传递到
writerow
的单行、双循环、平面生成器替换,执行速度更快:

writer.writerows([k] + [v[key] for key in keys] for k, vl in ids.items() for v in vl)

你能在你的问题中提供
ids
的内容吗?@Jean Françoisfare更新了postSimplest:代替
print'{}\t{}.format(key,row)
do
writer.writerow([key,row['count'],row['pos'],row['u pos'],row['u neg'])
为什么不使用
csv.writer()
相反?@MartijnPieters DictWriter没有那么好:1)标题行与键不一致(id写为空字符串),2)没有写入所有dict数据,这在写入
ValueError:dict包含字段名中没有的字段时会产生错误
您可以使用空字段名/键。您可以将DictWriter配置为忽略额外的键。
extrasaction=“ignore”
yes很好。但是数据不在dict中。“id”是一个键,其余的在dict中。您需要重建自定义dict才能使用DictWriter。(还有标题问题)。这是不适用的,因为@MartijnPieters输入数据的组织方式只是添加一个额外的键,或者建议OP在构建时将额外的键放入风管:-)
        count   pos     _pos    _neg
31022550        0       20      0       0
31022550        2       20      2       0
31022550        0       20      0       0
with open('mycsvfile.csv', 'wb') as f:
with open('mycsvfile.csv', 'w',newline="") as f:
for k, vl in ids.iteritems():
for k, vl in ids.items():  # also works in python 2
writer.writerows([k] + [v[key] for key in keys] for k, vl in ids.items() for v in vl)