Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字典写入csv时遇到问题,其中键作为标题,值作为列_Python_Csv_Dictionary - Fatal编程技术网

Python 将字典写入csv时遇到问题,其中键作为标题,值作为列

Python 将字典写入csv时遇到问题,其中键作为标题,值作为列,python,csv,dictionary,Python,Csv,Dictionary,我有一本字典,看起来像: mydict = {"foo":[1,2], "bar":[3,4], "asdf":[5,6]} foo,bar,asdf 1,3,5 2,4,6 我正在尝试将其写入CSV文件,使其看起来像: mydict = {"foo":[1,2], "bar":[3,4], "asdf":[5,6]} foo,bar,asdf 1,3,5 2,4,6 我花了最后一个小时寻找解决方案,我发现最近的一个建议是这样做: headers = mydict.keys() with

我有一本字典,看起来像:

mydict = {"foo":[1,2], "bar":[3,4], "asdf":[5,6]}
foo,bar,asdf
1,3,5
2,4,6
我正在尝试将其写入CSV文件,使其看起来像:

mydict = {"foo":[1,2], "bar":[3,4], "asdf":[5,6]}
foo,bar,asdf
1,3,5
2,4,6
我花了最后一个小时寻找解决方案,我发现最近的一个建议是这样做:

headers = mydict.keys()
with open("File2.csv","w") as f:
    writer = csv.writer(f)
    writer.writerow(headers)
    writer.writerows(zip(mydict.values())
这将写入头ok,但不写入值。以下是我的输出:

foo,bar,asdf
[1,2]
[3,4]
[5,6]
如何获得所需的输出?我非常感谢你的帮助。谢谢你

你用过tablib吗

我通常用tablib来做这个用途。使用起来非常简单:

使用
zip(*mydict.values())
代替
zip(mydict.values())
。区别如下:

>>> zip(mydict.values())
[([1, 2],), ([3, 4],), ([5, 6],)]
>>> zip(*mydict.values())
[(1, 3, 5), (2, 4, 6)]
基本上,第二个版本的功能与
zip([1,2],[3,4],[5,6])
相同。这在文档中被称为

要强制排序,请使用以下命令:

>>> zip(*([k] + mydict[k] for k in sorted(mydict)))
[('asdf', 'bar', 'foo'), (5, 3, 1), (6, 4, 2)]
这包括标题,因此只需将其传递到
writerows()
,并删除对标题的
writerow()
调用

当然,您可以为那里的
sorted()
函数提供一个
参数来执行您喜欢的任何排序。例如,为了确保与问题中的顺序相同:

>>> order = {'foo': 0, 'bar': 1, 'asdf': 2}
>>> zip(*([k] + mydict[k] for k in sorted(mydict, key=order.get)))
[('foo', 'bar', 'asdf'), (1, 3, 5), (2, 4, 6)]

另外,不使用
csv

mydict = {"foo":[1,2], "bar":[3,4], "asdf":[5,6]}

with open("File2.csv","w") as f:
    f.write(",".join(mydict.keys()) + "\n")
    for row in zip(*mydict.values()):
        f.write(",".join(str(n) for n in row) + "\n")
    f.close()

谢谢@F.J,这很有帮助。我有一个简单的问题要问你们——我怎样才能得到排序的标题和压缩的排序值呢?这真是太好了。非常感谢。