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

字典到。csv文件

  •  0
  • lr100  · 技术社区  · 8 年前

    似乎无法理解。

    sorted_metrics = {
        "1-Aug-2017": {"Messaged":1,"Rejected":2}
        "2-Aug-2017": {"Messaged":3,"Rejected":2}
        "3-Aug-2017": {"Messaged":4,"Rejected":2}
        "4-Aug-2017": {"Messaged":2,"Rejected":2}
        "5-Aug-2017": {"Messaged":3,"Rejected":2}
        "6-Aug-2017": {"Messaged":1,"Rejected":2}
        "7-Aug-2017": {"Messaged":5,"Rejected":2}
        "8-Aug-2017": {"Messaged":0,"Rejected":2}
        "9-Aug-2017": {"Messaged":4,"Rejected":2}
    }
    

    我想要我的。csv文件如下所示:

    Date         Messaged    Rejected
    1-Aug-2017   1           2
    2-Aug-2017   3           2
    3-Aug-2017   4           2
    4-Aug-2017   2           2
    5-Aug-2017   3           2
    6-Aug-2017   1           2
    7-Aug-2017   5           2
    8-Aug-2017   0           2
    9-Aug-2017   4           2
    

    4 回复  |  直到 8 年前
        1
  •  2
  •   Mohamed Ali JAMAOUI    8 年前

    总的来说,以下是您需要的:

    l = [[k, v['Messaged'], v['Rejected']] for k,v in sorted_metrics.items()]
    with open("output.csv", "wb") as f:
            writer = csv.writer(f)
            writer.writerow(['Date','Messaged','Rejected'])
            writer.writerows(l)
    

    详细说明:

    In [31]: sorted_metrics
    Out[31]: 
    {'1-Aug-2017': {'Messaged': 1, 'Rejected': 2},
     '2-Aug-2017': {'Messaged': 3, 'Rejected': 2},
     '3-Aug-2017': {'Messaged': 4, 'Rejected': 2},
     '4-Aug-2017': {'Messaged': 2, 'Rejected': 2},
     '5-Aug-2017': {'Messaged': 3, 'Rejected': 2},
     '6-Aug-2017': {'Messaged': 1, 'Rejected': 2},
     '7-Aug-2017': {'Messaged': 5, 'Rejected': 2},
     '8-Aug-2017': {'Messaged': 0, 'Rejected': 2},
     '9-Aug-2017': {'Messaged': 4, 'Rejected': 2}}
    
    In [32]: 
    
    In [32]: l = [[k, v['Messaged'], v['Rejected']] for k,v in sorted_metrics.items()]
    
    In [33]: l
    Out[33]: 
    [['9-Aug-2017', 4, 2],
     ['2-Aug-2017', 3, 2],
     ['6-Aug-2017', 1, 2],
     ['3-Aug-2017', 4, 2],
     ['4-Aug-2017', 2, 2],
     ['1-Aug-2017', 1, 2],
     ['7-Aug-2017', 5, 2],
     ['8-Aug-2017', 0, 2],
     ['5-Aug-2017', 3, 2]]
    

    2-然后按如下方式写入csv:

    with open("output.csv", "wb") as f:
            writer = csv.writer(f)
            writer.writerow(['Date','Messaged','Rejected'])
            writer.writerows(l)
    

    输出:

    Date,Messaged,Rejected
    9-Aug-2017,4,2
    2-Aug-2017,3,2
    6-Aug-2017,1,2
    3-Aug-2017,4,2
    4-Aug-2017,2,2
    1-Aug-2017,1,2
    7-Aug-2017,5,2
    8-Aug-2017,0,2
    5-Aug-2017,3,2
    
        2
  •  1
  •   Gerges    8 年前

    如果你愿意使用 pandas :

    df = pd.DataFrame(sorted_metrics).T
    df.index.name = 'Date'
    df.to_csv('bla.csv', sep=' ')
    
        3
  •  0
  •   Abdou    8 年前
    import csv
    
    
    sorted_metrics = {'1-Aug-2017': {'Messaged': 1, 'Rejected': 2},
                      '2-Aug-2017': {'Messaged': 3, 'Rejected': 2},
                      '3-Aug-2017': {'Messaged': 4, 'Rejected': 2},
                      '4-Aug-2017': {'Messaged': 2, 'Rejected': 2},
                      '5-Aug-2017': {'Messaged': 3, 'Rejected': 2},
                      '6-Aug-2017': {'Messaged': 1, 'Rejected': 2},
                      '7-Aug-2017': {'Messaged': 5, 'Rejected': 2},
                      '8-Aug-2017': {'Messaged': 0, 'Rejected': 2},
                      '9-Aug-2017': {'Messaged': 4, 'Rejected': 2}}
    
    with open('output.txt', 'w') as f:
        writer = csv.DictWriter(f, delimiter="\t", lineterminator="\n", fieldnames=['Date', 'Messaged', 'Rejected'])
        writer.writeheader()
        for k in sorted_metrics:
            d = {'Date': k}
            d.update(sorted_metrics.get(k))
            writer.writerow(d)
    
    print(open('output.txt').read())
    
    # Date    Messaged    Rejected
    # 1-Aug-2017  1   2
    # 2-Aug-2017  3   2
    # 3-Aug-2017  4   2
    # 4-Aug-2017  2   2
    # 5-Aug-2017  3   2
    # 6-Aug-2017  1   2
    # 7-Aug-2017  5   2
    # 8-Aug-2017  0   2
    # 9-Aug-2017  4   2
    

    请随意更改 delimiter lineterminator 参数以匹配所需的输出。

        4
  •  0
  •   Austin A    8 年前

    for key1, value1 in sorted_metrics.iteritems(): for key2, value2 in value1.iteritems(): #do something

    这将遍历字典,让您可以访问所有数据,我将由您来正确处理这些数据。