将字典中的元组列表写入cs

2024-05-19 12:36:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典,'allData'包含元组列表。在

allData = {'Shirts': [(69.95, 1), (52.45, 2), (99.95, 3), (79.95, 4), (79.95, 5)],
           'Jeans': [(70.0, 1), (50.0, 2), (99.0, 3), (79.95, 4), (80.0, 5)]}

我想写一个csv元素和它的每个键。在

我目前掌握的代码如下:

^{pr2}$

这给了我以下excel输出,其中衬衫和牛仔裤是A列和B列

^{3}$

这是我实际需要的输出,其中Shirts、id、Jeans、id分别是A、B、C、D列。在

Shirts  id  Jeans   id
69.95   1   70.0    1
52.45   2   50.0    2
99.95   3   99.0    3
79.95   4   79.95   4
79.95   5   80.0    5

任何帮助都是非常感谢的。在


Tags: csv代码id元素列表字典excel元组
1条回答
网友
1楼 · 发布于 2024-05-19 12:36:13

另一个可能的解决方案:

import os
import csv

from itertools import izip_longest

def writeCSV(path, filename, d):
    def flatten(l):
        return [t[i] for t in l for i in range(len(t))]

    filename = os.path.join(path, filename)

    with open(filename, 'wb') as outfile:
        writer = csv.writer(outfile, delimiter='~')
        keys = d.keys()
        writer.writerow(flatten(zip(keys, ['id'] * len(keys))))
        # Keep the values in the same order as keys
        values = [d[key] for key in keys]
        writer.writerows(flatten(row) for row in izip_longest(*values, fillvalue=('', '')))
        print "write file complete"

writeCSV("C:\\Projects\\Output", "output.csv", allData)
网友
2楼 · 发布于 2024-05-19 12:36:13

这是有效的:

import csv
import os

def writeCSV(path, filename,  d):
    filename = os.path.join(path, filename)
    col_names = list(d.keys())
    header = []
    for name in col_names:
        header.append(name)
        header.append('id')

    with open(filename, 'wb') as outfile:
        writer = csv.writer(outfile) # change delimiter with `delimiter=' '`
        writer.writerow(header)
        index = 0
        end = max([len(x) for x in d.values()])
        while index < end:
            line = []
            for name in col_names:
                try:
                    row_values = d[name][index]
                except IndexError:
                    row_values = [''] * len(col_names)
                line.extend(row_values)
            writer.writerow(line)
            index += 1

使用大小不等的数据:

^{pr2}$

csv_output.csv的内容:

Jeans,id,Shirts,id
70.0,1,69.95,1
50.0,2,52.45,2
99.0,3,99.95,3
79.95,4,79.95,4
80.0,5,79.95,5
80.0,5,,

注意,Jeans的列较长,因为它在输入字典中还有一个数据集。在

相关问题 更多 >