【问题标题】:Write a dictionary of lists to csv in Python [duplicate]在Python中将列表字典写入csv [重复]
【发布时间】:2016-07-11 05:40:24
【问题描述】:

我有一本像 {a: [1, 2, 3], b: [4, 5, 6], c: [7, 3, 2]} 这样的字典,我想用 Python 把它写到一个 csv 文件中。我是csv文件为:

col1,col2,col3,col4
a,1,2,3
b,4,5,6
c,7,3,2

我尝试使用 CSV Dict 编写器,但我无法获得,因为这里的值是一个列表。

感谢任何帮助!

【问题讨论】:

  • 你的意思是{'a':[1,2,3],...} 吗?还是a 真的没有被引用?
  • 嗯,*.csv 文件只是一个文本文件。您可以尝试遍历字典并构建字符串。稍后,只需使用open() 函数将此字符串写入文件。您的字符串应如下所示:col1;col2\n 1;4\n 2;5\n 3;6\n
  • @JoranBeasley 是的,它是一个字符串。它应该像 {'a':[1,2,3]}。但我希望这个键和值列表在不同列的单行中

标签: python python-2.7 csv dictionary


【解决方案1】:

您可以使用 Python 的 csv 库来执行此操作,如下所示(对于 Python 3.x,请参见下文):

import csv

my_dict = {"a" : [1, 2, 3], "b" : [4, 5, 6], "c" : [7, 3, 2]}

with open("output.csv", "wb") as f_output:
    csv_output = csv.writer(f_output)
    csv_output.writerow(['col1', 'col2', 'col3', 'col4'])
    
    for key in sorted(my_dict.keys()):
        csv_output.writerow([key] + my_dict[key])

给你:

col1,col2,col3,col4
a,1,2,3
b,4,5,6
c,7,3,2

.writerow() 函数获取项目列表并将它们以正确格式写入您的输出 CSV 文件。当您希望将键作为第一项时,它会将key 与它们连接的项目传递给在my_dict 字典中查找key 时找到的项目,从而产生您想要的输出。


注意:如果使用Python 3.x,需要修改文件打开行,不需要排序:

with open("output.csv", "w", newline="") as f_output:

【讨论】:

    【解决方案2】:
    with open("out.csv","wb") as csv_out:
        # first the header
        csv_out.write(",".join("Col%d"%i for i in range(len(a_dict.values()[0]))+"\n")
        # then each row .... make sure its sorted by the keys ...
        for key,a_list in sorted(a_dict.items(),key=lambda row:row[0])
            x = [key,]
            x.extend(a_list)
            csv_out.write(",".join(str(i) for i in x)
    

    【讨论】:

      【解决方案3】:

      希望以下代码可以提供帮助:

      fo = open("example.csv", "wr")
      fo.write("col1,col2,col3,col4\n")
      fo.write("a,1,2,3\n")
      fo.write("b,4,5,6\n")
      fo.write("c,7,8,9\n")
      fo.close()
      

      【讨论】:

      • 什么是"wr" 我很确定那是不合法的......
      【解决方案4】:
      >>> mydict
      {'b': [4, 5, 6], 'c': [7, 3, 2], 'a': [1, 2, 3]}
      >>> result ="\n".join(["{0} {1}".format(key, " ".join([str(x) for x in list_value])) for key, list_value in mydict.iteritems()])
      >>> print result
      b 4 5 6
      c 7 3 2
      a 1 2 3
      

      将结果写入 csv 文件。

      如果订单很重要,您可以使用OrderedDict

      【讨论】:

        【解决方案5】:
        d={'a': [1, 2, 3],'b': [4, 5, 6], 'c': [7, 3, 2]}
        with open("result.txt","w+") as f:
            for k,v in d.items():
                    alist=[k]+[str(r) for r in v]#alist=['a','1','2','3']
                    line=' '.join(alist)+"\n"#line="a  1 2 3\n"
                    f.write(line)
        

        【讨论】:

          【解决方案6】:

          仅供练习,这里有另一个版本;

          mydict = {'a': [1, 2, 3], 'c': [7, 3, 2], 'b': [4, 5, 6]}
          
          with open('test.csv','w') as f:
            for k,v in mydict.iteritems():
              f.write(str.join(',', [k]+[str(i) for i in v])+'\n')
          

          它只是遍历字典项,为每个项生成一行。

          每一行都是通过创建一个数组来生成的,其中键作为第一个元素,值转换为后面的字符串。然后它只是使用逗号分隔符连接数组的元素。

          【讨论】:

            猜你喜欢
            • 2016-03-01
            • 1970-01-01
            • 2018-07-18
            • 2019-01-10
            • 2019-06-22
            • 2012-11-04
            • 2014-06-17
            • 1970-01-01
            • 2021-05-15
            相关资源
            最近更新 更多