我有一本以键为元组的字典,我想写一个没有引号和括号的文件。
我尝试使用",".join(map(str, key))
。
import csv
d={(1, 1, 1): 600, (5, 5, 5): 700, (4, 4, 4): 800}
with open("out.csv", "wb") as f:
w = csv.writer(f)
for key,items in d.items():
w.writerow([key,items])
Run Code Online (Sandbox Code Playgroud)
我得到这个:
import csv
d={(1, 1, 1): 600, (5, 5, 5): 700, (4, 4, 4): 800}
with open("out.csv", "wb") as f:
w = csv.writer(f)
for key,items in d.items():
w.writerow([key,items])
Run Code Online (Sandbox Code Playgroud)
我期望这样:
"(1, 1, 1)",600
"(5, 5, 5)",700
"(4, 4, 4)",800
Run Code Online (Sandbox Code Playgroud)
您需要解压缩键值才能将其放入列表。ie(1,2,1)-> 1,2,1并将此列表传递给writerow
function。
您当前代码中的代码[(1,1,1),600]
将用作提要,并将其视为2元素列表,因此会产生上述输出。
你需要解压的键值即[(1,1,1),600]
到[1,1,1,600]
使用*
运算符可以达到目的 [*(1,1,1),600]
同样open
在w
非wb
二进制模式下,因为您以ASCII格式而不是二进制格式提供数据
import csv
d={(1, 1, 1): 600, (5, 5, 5): 700, (4, 4, 4): 800}
with open("out.csv", "w") as f:
w = csv.writer(f)
for key,items in d.items():
w.writerow([*key,items])
Run Code Online (Sandbox Code Playgroud)
否则,您可以使用(如果不想与 *
import csv
d={(1, 1, 1): 600, (5, 5, 5): 700, (4, 4, 4): 800}
with open("out.csv", "w") as f:
w = csv.writer(f)
for key,items in d.items():
lis = [i for i in key]+[items]
w.writerow(lis)
Run Code Online (Sandbox Code Playgroud)