【问题标题】:Writing 3 python dictionaries to a csv将 3 个 python 字典写入 csv
【发布时间】:2019-02-19 01:54:48
【问题描述】:

我有 3 个字典(其中 2 个是具有多个值的 setdefault 字典)-
score_dict-

{'Id_1': [('100001124156327', 0.0),                                                                                                                                                                                                                                                                                
          ('100003643614411',0.0)],
 'Id_2': [('100000435456546',5.7),
          ('100000234354556',3.5)]}

post_dict-

{'Id_1':[(+,100004536)],
 'Id_2' :[(-,100035430)]}

comment_dict-

{'Id_1':[(+,1023434234)],
 'Id_2':[(-,10343534534)
          (*,1097963644)]}

我目前的方法是将它们写入 3 个不同的 csv 文件然后合并它们,我想根据共同的第一行(ID_row)合并它们。 但我无法弄清楚如何将 3 个 csv 文件合并为一个 csv 文件。另外,有什么方法可以将所有 3 个字典写入单个 csv 而无需单独编写它们。

需要输出-

Ids   Score_Ids                Post_Ids      Comment_Ids
Id_1  100001124156327',0.0     +,100004536   +,1023434234
      100003643614411',0.0
Id_2  100000435456546',5.7     -,100035430   -,10343534534
      100000234354556',3.5                   *,1097963644                                                                                                               

如何用最好的方法以正确的方式做到这一点?

【问题讨论】:

    标签: python python-3.x csv


    【解决方案1】:

    您可以先将它们全部合并,然后将它们写入 csv 文件:

    import pprint
    
    scores = {
      'Id_1': [
        ('100001124156327', 0.0),                                            
        ('100003643614411',0.0)],
     'Id_2': [
       ('100000435456546',5.7),
      ('100000234354556',3.5)
      ]
    }
    
    post_dict = {
      'Id_1':[
        ('+',100004536)
      ],
     'Id_2' :[
        ('-',100035430)
      ]
    }
    comment_dict = {
      'Id_1':[
        ('+',1023434234)
      ],
      'Id_2':[
        ('-',10343534534),
        ('*',1097963644)
      ]
    }
    
    merged = {
      key: {
          "Score_Ids": value,
          "Post_Ids": post_dict[key],
          "Comment_Ids": comment_dict[key]
        }
      for key, value
      in scores.iteritems()
    }
    
    pp = pprint.PrettyPrinter(depth=6)
    
    pp.pprint(merged)
    

    供参考:https://repl.it/repls/SqueakySlateblueDictionaries

    【讨论】:

    • 好的,我可以从中形成一个字典,现在写入 csv 将与写入任何其他字典相同,这也是我新手的最佳方法这个,我之前没有任何经验
    • 我建议首先在 python 中正确获取数据,例如通过合并,比在 csv 文件中调整数据更可取。虽然是 YMMV。
    • 你能告诉我如何将它写入csv,因为我在使用它后得到了一个字典字典。
    • 我在 csv 中需要它
    • 也许我会稍微切入正题;我不会为你写所有你的代码。想必你已经有了写 csv 文件的方法,所以你需要做的就是按照这里的格式取数据,然后把它变成你需要的格式
    【解决方案2】:

    我建议您将三个 dicts 转换为一个 dicts 列表,然后再将其写入 csv 文件。

    例子

    rows = [
        {"Score_Id": "...", "Post_Id": "...", "Comment_Id": "..."},
        {"Score_Id": "...", "Post_Id": "...", "Comment_Id": "..."},
        {"Score_Id": "...", "Post_Id": "...", "Comment_Id": "..."},
        ...
    ]
    

    然后使用csv.DictWriter 类写入所有行。

    因为你的值中有逗号(你确定这是一个好的行为吗?也许将它们分成两个不同的列可能是更好的方法),小心使用制表符或其他东西作为分隔符

    【讨论】:

    • 是的,我不确定什么是正确的方法,因为我是新手,并且仍在发展我的想法,任何有关如何解决此类问题的线索将不胜感激
    【解决方案3】:

    我建议将这三个都写到同一个文件中

    您可以通过以下方式获得公共密钥:

    common_keys = set(score_dict.keys()+post_dict.keys()+comment_dict.keys())
    for key_ in common_keys:
        val_score = score_dict.get(key_, some_default_value)
        post_score = post_dict.get(key_, some_default_value)
        comment_score = comment_dict.get(key_, some_default_value)
        # print key and vals to csv as before
    

    【讨论】:

    • 好的,我拿到了密钥,现在如何继续,比如如何在其中写入更多值,然后写入 csv
    猜你喜欢
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 2012-11-04
    • 2018-04-08
    • 2018-03-19
    • 2016-03-01
    相关资源
    最近更新 更多