簡體   English   中英

無法將字典寫入csv,其中鍵作為標題,值作為列

[英]Trouble writing a dictionary to csv with keys as headers and values as columns

我有一個字典,看起來像:

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

我正在嘗試將其寫入CSV文件,使其看起來像:

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())

這會將標頭寫好,但不會寫入值。 這是我的輸出:

foo,bar,asdf
[1,2]
[3,4]
[5,6]

如何獲得我需要的輸出? 我真的很感激一些幫助。 謝謝

而不是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()函數提供一個key參數,以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)]

你使用tablib了嗎?

我通常使用tablib進行此用途。 它非常簡單易用: https//pypi.python.org/pypi/tablib/0.9.3

http://docs.python-tablib.org/en/latest/api/

另外,不使用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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM