写入键:将值对添加到带有变量#s值的制表符分隔文件中

时间:2012-04-02 22:38:36

标签: python csv dictionary writer

初学者问题: 我有一个字典,其中的值是(一个变量#)字符串的列表。最后,我想将每个字典条目写入单个制表符分隔的行,其中键为列1,值列表中的各个项目为列2-n。我使用以下代码生成一个输出文件,其中键为第1列,值列表为第2列,但我不知道如何从那里继续。

mydict = {'spider':['kate', 'susan'],
          'fish':['kate'],
          'dog':['andy'], 
          'cat':['andy','colby','jeff']} 
f = open('outfile.txt', 'w') 
writer = csv.writer(f, delimiter = '\t')
for key, value in orfdict.iteritems():
    writer.writerow([orf] + [value])

python文档建议您可以使用zip()创建列表形式键:值对,但是当我在交互式提示符下尝试此操作时:

>>> for key,value in mydict.iteritems():
...     mypair = zip(key,value)
...     print mypair

我得到了这个奇怪的输出,所以我显然不理解这些事情:

[('f', 'kate')]
[('c', 'andy'), ('a', 'colby'), ('t', 'jeff')]
[('s', 'kate'), ('p', 'susan')]
[('d', 'andy')]

最简单的方法是为字典上的每次迭代创建一个空列表,然后先将该列附加到该列表中,然后将每个值附加到缩进的循环中?我觉得我一定错过了什么。

4 个答案:

答案 0 :(得分:5)

尝试将此单个值添加到现有列表中:

writer.writerow([key] + value)

key是单个值,value已经是列表)

答案 1 :(得分:2)

看起来您重命名了一些变量,并且没有重命名其他变量,我假设您的示例代码需要阅读:

mydict = {'spider':['kate', 'susan'],
          'fish':['kate'],
          'dog':['andy'], 
          'cat':['andy','colby','jeff']} 
f = open('outfile.txt', 'w') 
writer = csv.writer(f, delimiter = '\t')
for key, value in mydict.iteritems():
    writer.writerow([key] + [value])
在这种情况下,csv writer似乎没必要,为什么不使用:

mydict = {'spider':['kate', 'susan'],
          'fish':['kate'],
          'dog':['andy'],
          'cat':['andy','colby','jeff']}
f = open('outfile.txt', 'w')
for key, value in mydict.iteritems():
    f.write('%s\t%s\n' % (key,'\t'.join(value)))
f.close()

答案 2 :(得分:0)

尝试将for循环更改为以下内容:

for key, value in orfdict.iteritems():
    writer.writerow([key] + value)

由于orfdict中的值是列表,因此在每次迭代中value都是一个列表。例如,在第一次迭代中,key可以是'spider'value可以是['kate', 'susan'],因此[key] + value将变为['spider'] + ['kate', 'susan']或{{1 }}

答案 3 :(得分:0)

>>> [(x, y) for x, x2 in mydict.iteritems() for y in x2]
[('fish', 'kate'), ('cat', 'andy'), ('cat', 'colby'), ('cat', 'jeff'), ('spider', 'kate'), ('spider', 'susan'), ('dog', 'andy')]