【问题标题】:Create CSV file from dictionary of list of tuples从元组列表字典创建 CSV 文件
【发布时间】:2016-08-19 10:12:15
【问题描述】:

我想拿这本我有的字典:

    table = {2015-11-10:[('pear', 22), ('banana', 50)], 
    2015-11-13:[('banana', 22), ('apple', 50), ('strawberry', 30), ('pear', 35), ('orange', 2), ('mango', 76)]
    2015-11-12:[('banana', 22), ('orange', 50), ('mango', 30), ('strawberry', 35)]
    }

    with open ('transaction.csv', 'wb') as f:
        w = csv.writer(f, delimiter = ',')
        w.writerow(['transaction_date', 'fruits', 'quantity'])
        for k,v in table.items():
            w.writerow([k,v])

我想要打印的是每个键,也就是日期,只有一对元组,所以只有三列。 但是我一直将其打印为:

    2015-11-10,"[('pear', 22), ('banana', 50)]"
    2015-11-13,"[('banana', 22), ('apple', 50), ('strawberry', 30), ('pear', 35), ('orange', 2), ('mango', 76)]"
    2015-11-12,"[('banana', 22), ('orange', 50), ('mango', 30), ('strawberry', 35)]"

而不是这个:

    2015-11-10,pear,22
    2015-11-10,banana,50
    2015-11-13,banana,22

等等。

任何帮助都将不胜感激。谢谢。

【问题讨论】:

  • 你能举例说明你的预期输出吗?谢谢
  • dict 中的破折号表示减法:{2015-11-10 : None} ==> {1994: None} 我假设这不是您想要的?
  • 想要的输出示例:transaction_date, fruits, quantity\n 2015-11-10, pear, 22\n 2015-11-10, banana, 50\n 2015-11-13, banana, 22\n 2015-11-13, apple, 50\n 2015-11-13, strawberry, 30\n ...
  • 您不使用csv.DictWriter的任何原因?
  • @TadhgMcDonald-Jensen 我不建议使用它,因为从技术上讲,我只有一本包含多个键和值的字典

标签: python csv dictionary tuples


【解决方案1】:

数据结构是嵌套的。您需要一个内循环来处理水果和数量:

import csv

table = {"2015-11-10": [('pear', 22), ('banana', 50)],
         "2015-11-13": [('banana', 22), ('apple', 50), ('strawberry', 30), ('pear', 35), ('orange', 2), ('mango', 76)],
         "2015-11-12": [('banana', 22), ('orange', 50), ('mango', 30), ('strawberry', 35)]
         }

with open('transaction.csv', 'wb') as f:
    w = csv.writer(f, delimiter=',')
    w.writerow(['transaction_date', 'fruits', 'quantity'])

    for transaction_date, fruits in table.items():
        for fruit, quantity in fruits:
            w.writerow([transaction_date, fruit, quantity])

这是我运行代码后在transaction.csv 中的内容:

transaction_date,fruits,quantity
2015-11-10,pear,22
2015-11-10,banana,50
2015-11-13,banana,22
2015-11-13,apple,50
2015-11-13,strawberry,30
2015-11-13,pear,35
2015-11-13,orange,2
2015-11-13,mango,76
2015-11-12,banana,22
2015-11-12,orange,50
2015-11-12,mango,30
2015-11-12,strawberry,35

【讨论】:

    【解决方案2】:

    我认为这将实现您的目标。您还需要遍历与每个日期键关联的值对:

    import csv
    
    table = {
        '2015-11-10':[('pear', 22),
                      ('banana', 50)], 
        '2015-11-13':[('banana', 22),
                      ('apple', 50),
                      ('strawberry', 30),
                      ('pear', 35),
                      ('orange', 2),
                      ('mango', 76)],
        '2015-11-12':[('banana', 22),
                      ('orange', 50),
                      ('mango', 30),
                      ('strawberry', 35)]
        }
    
    with open ('transaction.csv', 'wb') as f:
            w = csv.writer(f, delimiter = ',')
            w.writerow(['transaction_date', 'fruits', 'quantity'])
            for date, pairs in table.items():
                for pair in pairs:
                    w.writerow([date, pair[0], pair[1]])
    

    【讨论】:

      猜你喜欢
      • 2015-09-16
      • 2023-03-22
      • 2022-01-14
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 2011-08-29
      • 1970-01-01
      相关资源
      最近更新 更多