我已经生成了一个dicts的词典,每个词包含5个随机生成的字符串元素。
我试图将每个dict输出到csv文件中的一行,只需" clean"字符串值,不带引号或括号。
从这开始:
numberofhands = range(int(raw_input("# of hands you want to generate: ")))
allhands = {} #create a place for all the hand dicts to go
for i in numberofhands: # loads allhands with specified # of 5 card hands
temphand = makehand(battlepile)
allhands.update({i:temphand})
with open(nameoffile,'wb') as outfile: #makes csv using writer and list of dict values
writer = csv.writer(outfile,delimiter='\t')
for key, value in allhands.items():
aRow = []
for i in value:
aRow.append(value[i])
writer.writerow([aRow])
输出如下:
['蜘蛛' '飞船' '恶' '豪猪' ' Sword']
['列车' ' Sumo Wrestler' '锯' '玻璃' '机器人']
['蜜蜂' '大炮' '家' ' T.N.T' ' Sumo Wrestler']
['空气' '蜘蛛' '风' '飞船' '辣']
['龟' '圣诞老人' '车' '飞机' '云']
我的目标是获得如下所示的输出:
蜘蛛太空船邪恶豪猪剑
火车相扑摔跤手锯玻璃机器人
Bees Cannon House T.N.T Sumo Wrestler
Air Spider Wind Spaceship辣味
乌龟圣诞老人汽车飞机云
我正在与DictWriter斗争 - 是否有一种更清洁,更pythonic的方法来实现这一目标?这是我目前的位置:
with open(nameoffile, 'wb') as outfile: #makes csv using DictWriter and list of dict values
fieldnames = [1,2,3,4,5]
writer = csv.DictWriter(outfile, dialect='excel', fieldnames=fieldnames)
for key, value in allhands.items():
writer.writeheader()
for k, v in value[key]:
writer.writerow([v])
给出了KeyError: 0
我感谢任何指导。
答案 0 :(得分:0)
这是一个如何通过DictWriter从Dict写入CSV文件的示例。
我箍它有帮助。
import csv
allhands = {1:'Spider', 2:'Spaceship', 3:'Evil', 4:'Porcupine', 5:'Sword'}
nameoffile ='E://file.csv'
with open(nameoffile, 'wb') as outfile:
#makes csv using DictWriter
fieldnames = [1,2,3,4,5]
writer = csv.DictWriter(outfile, dialect='excel', fieldnames=fieldnames)
writer.writeheader()
temp = dict()
for keys, values in allhands.items():
temp[keys] = values
writer.writerow(temp)
答案 1 :(得分:0)
感谢Sadegh,我得到了它的工作,但我不太明白为什么:)
令我困惑的部分是:
temp = dict()
for keys, values in allhands.items():
temp[keys] = values
writer.writerow(temp)
我从未定义过dict(),是否创建了一个元组?
我的功能代码如下 - 我只是把这个答案放到了一个for循环中,迭代我的dicts字典。
with open(nameoffile, 'wb') as outfile: #makes csv using DictWriter and list of dict values
for k, v in allhands.items():
fieldnames = [1,2,3,4,5]
writer = csv.DictWriter(outfile, dialect='excel', fieldnames=fieldnames)
temp = dict()
for keys, values in v.items():
temp[keys] = values
writer.writerow(temp)
第二个问题:在for循环中重新启动writer是pythonic吗?我曾假设这将在csv文件中返回一行,已经覆盖了自己,并以最后一个dict的内容结束。
但它有效!只是希望我理解为什么:)