代码之家  ›  专栏  ›  技术社区  ›  Madamadam

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

  •  0
  • Madamadam  · 技术社区  · 6 年前

    list ):

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

    正如你所见,一个德语术语可以容纳不同数量的英语翻译。我想将每个德语术语及其对应的翻译输出到一行中的单独列中,所以 "Motor" "engine" 在第2栏和 "motor" 在第3栏。

    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个嵌套for循环更聪明的方法。

    2 回复  |  直到 6 年前
        1
  •  1
  •   hqkhan    6 年前

    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 .

        2
  •  1
  •   martineau    6 年前

    这里有一个方法:

    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)
    

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