将嵌套元组的列表写入csv-fi

2024-09-09 04:00:51 发布

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

我有一个嵌套元组的列表,如下所示:

data = [('apple', 19.0, ['gala', '14', 'fuji', '5', 'dawn', '3', 'taylor', '3']),
 ('pear', 35.0, ['anjou', '29', 'william', '6', 'concorde', '4'])]

我想把它展平,这样我就可以写一个.csv文件,其中每个列表上的每一项都对应一列:

^{pr2}$

我试着用简单的方法:

flattened = [value for pair in data for value in pair]

但结果并不是理想的结果。有什么办法解决这个问题吗?在


Tags: inapple列表fordatavalue元组pear
3条回答

这似乎需要递归

def flatten(inlist):
    outlist=[]
    if isinstance(inlist, (list, tuple)):
        for item in inlist:
            outlist+=flatten(item)
    else:
        outlist+=[inlist]
    return outlist

不管你的列表有多嵌套,这都应该有效。用这个来测试它:

^{pr2}$

免责声明-不是非常高效的Python代码。在

但是,它起作用了。(您可以调整宽度(当前为10))

data = [('apple', 19.0, ['gala', '14', 'fuji', '5', 'dawn', '3', 'taylor', '3']),
        ('pear', 35.0, ['anjou', '29', 'william', '6', 'concorde', '4'])]

flattened = list()
for i, each in enumerate(data):
    flattened.append(list())
    for item in each:
        if isinstance(item, list):
            flattened[i].extend(item)
        else:
            flattened[i].append(item)
# Now print the flattened list in the required prettified manner.
for each in flattened:
    print ("".join(["{:<10}".format(item) for item in each]))
    # String is formatted such that all items are width 10 & left-aligned

注意-我试图为更一般的情况编写函数。
PS-欢迎任何代码建议。我真的很想改进这个。在

要将数据写入CSV,只需使用csv模块并给它一行;构造行并不难:

import csv

with open(outputfile, 'w', newlines='') as ofh:
    writer = csv.writer(ofh)

    for row in data:
        row = list(row[:2]) + row[2]
        writer.writerow(row)

这会产生:

^{pr2}$

相关问题 更多 >