這是我當前的代碼:
import csv
data = {'name' : ['Dave', 'Dennis', 'Peter', 'Jess'],
'language': ['Python', 'C', 'Java', 'Python']}
new_data = []
for row in data:
new_row = {}
for item in row:
new_row[item['name']] = item['name']
new_data.append(new_row)
print(new_data)
header = new_data[0].keys()
print(header)
with open('output.csv', 'w') as fh:
csv_writer = csv.DictWriter(fh, header)
csv_writer.writeheader()
csv_writer.writerows(new_data)
我想要實作的是字典鍵變成了 csv 標題,值變成了行。
但是在運行代碼時,我TypeError: 'string indices must be integers'在第 21 行得到了一個。
uj5u.com熱心網友回復:
問題
這里的問題是for row in data。這實際上是迭代字典的鍵data,然后你迭代字典鍵的字符:
In [2]: data = {'name' : ['Dave', 'Dennis', 'Peter', 'Jess'],
...: 'language': ['Python', 'C', 'Java', 'Python']}
...:
...: new_data = []
...: for row in data:
...: for item in row:
...: print(item)
...:
n
a
m
e
l
a
n
g
u
a
g
e
方法
你真正需要做的是zip同時捕捉每個人的名字和喜歡的語言:
In [43]: for row in zip(*data.values()):
...: print(row)
...:
('Dave', 'Python')
('Dennis', 'C')
('Peter', 'Java')
('Jess', 'Python')
現在,您需要zip使用以下鍵的元組data:
In [44]: header = data.keys()
...: for row in zip(*data.values()):
...: print(list(zip(header, row)))
...:
[('name', 'Dave'), ('language', 'Python')]
[('name', 'Dennis'), ('language', 'C')]
[('name', 'Peter'), ('language', 'Java')]
[('name', 'Jess'), ('language', 'Python')]
解決方案
現在您可以將這些元組傳遞給dict建構式來創建您rowdicts的csv_writer.writerows需要:
header = data.keys()
new_data = []
for row in zip(*data.values()):
new_data.append(dict(zip(header, row)))
with open("output.csv", "w ", newline="") as f_out:
csv_writer = csv.DictWriter(f_out, header)
csv_writer.writeheader()
csv_writer.writerows(new_data)
輸出output.csv:
name,language
Dave,Python
Dennis,C
Peter,Java
Jess,Python
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/464538.html
下一篇:特定格式的JSON到CSV
