簡體   English   中英

將具有嵌套元組的列表寫入CSV文件

[英]Writing a list with nested tuples to a csv file

我有一個包含嵌套元組的列表,如下所示:

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

我想將其展平,以便我可以編寫一個.csv文件,其中每個列表上的每個項目都對應於一列:

apple    19.0,   gala   14   fuji    5 dawn     3 taylor 3
pear     35.0    anjou  29   william 6 concorde 4

我嘗試使用簡單的展平:

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

但是結果並不是想要的。 關於如何解決這個問題的任何想法?

要將數據寫到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)

這將產生:

apple,19.0,gala,14,fuji,5,dawn,3,taylor,3
pear,35.0,anjou,29,william,6,concorde,4

免責聲明-效率不高的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-歡迎提供任何代碼建議。 我真的很想改善這一點。

這似乎需要遞歸

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

無論列表如何嵌套,這都應該起作用。 對此進行了測試:

>>> flatten([0,1,2,[3,4,[5,6],[7,8]]])
[0, 1, 2, 3, 4, 5, 6, 7, 8]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM