Skip to main content
 首页 » 编程设计

python之编写字典列表,每个键有多个值作为新行

2025年05月04日25tintown

作为序言,将会有很多看起来重复的问题,但这些问题的解决方案都没有真正帮助到我。我有我用来编写字典列表的常用代码,使用 csv 包:

    import csv 
    to_csv = list_dic 
    keys = to_csv[0].keys() 
    with open('output.csv', 'w') as output_file: 
        dict_writer = csv.DictWriter(output_file, keys) 
        dict_writer.writeheader() 
        dict_writer.writerows(to_csv) 

当用在具有单个键值的字典列表上时,这段代码工作得很好(好吧,除了输出 csv 每隔一行有一个空行的事实),但现在我有一个具有多个值的字典列表每个键,很像下面的例子:

    list_dic = [{'a':[x,y],'b':[1,2],'c':[1,2]}, 
                {'a':[x,y],'b':[1,2],'c':[1,2]}, 
                {'a':[x,y],'b':[1,2],'c':[1,2]}, 
                {'a':[x,y],'b':[1,2],'c':[1,2]}] 

基本上我的 csv 输出目前看起来像这样:

     'a'     'b'     'c' 
    [x,y]   [1,2]   [1,2] 
    [x,y]   [1,2]   [1,2] 
    [x,y]   [1,2]   [1,2] 
    [x,y]   [1,2]   [1,2] 

我正试图到达这里:

      'a'    'b'    'c' 
       x      1      1 
       y      2      2 
       x      1      1 
       y      2      2 
       x      1      1 
       y      2      2 
       x      1      1 
       y      2      2           

我已经提出了非常相似的问题,但似乎无法将任何解决方案应用于我的特定情况。我试过使用某种 for 语句来写入多行,但失败了。

感谢您的帮助,如果您知道任何与这种情况重复的问题,请指出正确的方向。

编辑:示例中每个键有 2 个值,但实际上值的数量是未知的,只有 >1

请您参考如下方法:

如果你压缩和解压缩数据足够多,你会得到你想要的格式:

list_dic = [{'a':['x','y'],'b':[1,2],'c':[1,2]}, 
            {'a':['x','y'],'b':[1,2],'c':[1,2]}, 
            {'a':['x','y'],'b':[1,2],'c':[1,2]}, 
            {'a':['x','y'],'b':[1,2],'c':[1,2]}] 
import csv 
to_csv = list_dic 
keys = to_csv[0].keys() 
with open('output.csv', 'w') as output_file: 
    dict_writer = csv.DictWriter(output_file, keys) 
    dict_writer.writeheader() 
    for dic in list_dic: 
        keys, values = zip(*dic.items()) 
        for values in zip(*values): 
            dict_writer.writerow(dict(zip(keys, values)))