【问题标题】:writing a dictionary value that is a list without brackets编写一个不带括号的列表的字典值
【发布时间】:2020-09-09 18:56:24
【问题描述】:

我有一本字典,d,其结构如下:

{'k':[5, -2, 6, 7, 2, 4, 8], 'c':[6, 3, 1, 2, 3, 4, 9]}

我想将其写入一个 .csv,如下所示:

k, 5, -2, 6, 7, 2, 4, 8
c, 6, 3, 1, 2, -3, 4, 9

我尝试了以下代码:

with open('file.csv', 'w') as f:
    for key in d.keys():
        f.write("%s,%s\n"%(key,d[key]))

不幸的是,这会产生以下结果:

k, [5, -2, 6, 7, 2, 4, 8]
c, [6, 3, 1, 2, -3, 4, 9]

我的解决方案是在之后运行trsed 命令,但必须有一种方法可以先正确编写它,对吧?

提前致谢!

【问题讨论】:

    标签: python list csv dictionary write


    【解决方案1】:
    d = {'k':[5, -2, 6, 7, 2, 4, 8], 'c':[6, 3, 1, 2, 3, 4, 9]}
    
    with open('file.csv', 'w') as f:
        for key in d.keys():
            print(key, *d[key], sep=', ', file=f)
    

    打印到文件:

    k, 5, -2, 6, 7, 2, 4, 8
    c, 6, 3, 1, 2, 3, 4, 9
    

    【讨论】:

    • 这就像一个魅力!我不知道你可以像这样使用print() 命令。
    【解决方案2】:

    我建议首先构建您想要以 CSV 格式写出的列表:

    >>> [[k] + v for k, v in d.items()]
    [['k', 5, -2, 6, 7, 2, 4, 8], ['c', 6, 3, 1, 2, 3, 4, 9]]
    

    从那里您的原始代码将起作用,但我也建议使用 csv.writer 而不是滚动您自己的格式:

    import csv
    with open('file.csv', 'w') as file:
        csv_writer = csv.writer(file)
        for row in [[k] + v for k, v in d.items()]:
            csv_writer.writerow(row)
    

    【讨论】:

    • 赞成。绝对使用csv 模块是正确的方式
    • 也很好用!这是我比较熟悉的一个。我不知道为什么我一开始不使用 CSV。
    【解决方案3】:

    可以使用join函数:

    with open('file.csv', 'w') as f:
        for k, lst in dct.items():
            lst = ','.join(map(str, lst))
            f.write('%s,%s\n' % (k, lst))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-26
      • 2021-11-16
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      • 2022-11-11
      相关资源
      最近更新 更多