将可变长度的嵌套数组输出为CSV

时间:2019-01-17 22:21:12

标签: python python-2.7 csv data-structures

我有一个要在CSV文件中输出的数据样本。数据结构是由不同的德语术语(字典)和相应的可能的英语翻译(list)组成的嵌套列表:

all_terms = [{'Motor': ['engine', 'motor']},
             {'Ziel': ['purpose', 'goal', 'aim', 'destination']}]

如您所见,一个德语术语可以容纳数量不定的英语翻译。我想将每个德语术语及其相应的翻译输出到一行中的不同列中,因此"Motor"在第1列中,"engine"在第2列中,"motor"在第3列中。 / p>

请参阅示例: Table

我只是不知道如何正确遍历数据。 到目前为止,我要输出的代码:

with open(filename, 'a') as csv_file:
    writer = csv.writer(csv_file)
    # The for loop
    for x in all_terms:
        for i in x:
            for num in i:
                writer.writerow([i, x[i][num]])

但是会抛出该错误:

writer.writerow([i, x[i][num]]) TypeError: list indices must be integers, not unicode

任何提示都值得赞赏,也许还有比3嵌套的循环更聪明的方法。

2 个答案:

答案 0 :(得分:1)

以下解决方案如何?

import csv

all_terms = [{'Motor': ['engine', 'motor']},
             {'Ziel': ['purpose', 'goal', 'aim', 'destination']}]

with open('test.csv', 'a') as csv_file:
    writer = csv.writer(csv_file)
    # The for loop
    for small_dict in all_terms:
        for key in small_dict:
            output = [key, *small_dict[key]]              
            writer.writerow(output)

test.txt中的输出:

Motor,engine,motor
Ziel,purpose,goal,aim,destination

我使用*运算符将字典值中的所有项目解包,以创建要写入writerow的行。如果您在字典中有多个条目,则可以解决这种情况all_terms内。

答案 1 :(得分:1)

这是一种方法:

import csv


all_terms = [{'Motor': ['engine', 'motor']},
             {'Ziel': ['purpose', 'goal', 'aim', 'destination']}]

filename = 'tranlations.csv'

with open(filename, 'a', newline='') as csv_file:
    writer = csv.writer(csv_file)

    for term in all_terms:
        word, translations = term.popitem()
        row = [word] + translations
        writer.writerow(row)

此后CSV文件的内容:

Motor,engine,motor
Ziel,purpose,goal,aim,destination