【问题标题】:How to create a dictionary with lists as values out of a csv file?如何从 csv 文件中创建一个包含列表作为值的字典?
【发布时间】:2018-02-28 02:44:58
【问题描述】:

我有一个包含 19 列的 csv 文件,并希望将其作为字典,前 2 列是键(可能是一个元组或只是将它们合并为一个字符串),然后所有其他 17 列作为一个列表价值观。 excel 文件如下所示:image of the cvs file

我想要一本这样的字典:

d1 = { "A , 222" : [1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1]}  
d2={"B, 223" : [1,1,1,1,0,0,0,1,1,0,0,1,1,1,1,1]}
d3 = {....}

....

【问题讨论】:

    标签: python list csv dictionary


    【解决方案1】:

    这是使用csv.reader的解决方案

    from csv import reader
    
    d = {}
    with open('infile.csv', newline='') as f:
        r = reader(f)
        for row in r:
            if not row:
                continue # Handles blank rows
            key1, key2, *value = row
            d[(key1, key2)] = value
    

    编辑:

    key1, key2, *value = row 行仅适用于 Python 3。如果您无法使用该功能,您可以使用

    key1, key2 = row[:2]
    value = row[2:]
    

    【讨论】:

    • 这个答案确实展示了如何很好地使用模块。干得好!
    • key1, key2, *value = row 应该只适用于Python 3.x
    • @FrankAK 说得好,我将添加一条适用于旧版本的行。
    • 在这种情况下,从 open 语句中删除 newline="" :) (在打开文件以进行 阅读 时无论如何都没有用)
    • 你的(key1, key2) = value 应该转换为字符串而不是元组!
    【解决方案2】:

    你是这个意思吗?

    res = {}
    with open(fileName.csv, "r") as f:
        text = f.readlines()
        for line in text[1:]:
            part = line.strip().split(",")
            key  = ",".join(part[:2])
            value = [int(i) for i in part[2:]]
            res[key] = value
    

    【讨论】:

      【解决方案3】:

      使用 csv.reader 你可以这样做:

      代码:

      as_dict = {'{}, {}'.format(*row[:2]): row[2:] for row in reader if row}
      

      测试代码:

      data = StringIO(''.join('\n'.join(x.strip() for x in u"""
          A,222,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1  
          B,223,1,1,1,1,0,0,0,1,1,0,0,1,1,1,1,1
          """.split('\n')[1:-1])))
      
      reader = csv.reader(data)
      as_dict = {'{}, {}'.format(*row[:2]): row[2:] for row in reader if row}
      print(as_dict)
      

      结果:

      {
          'A, 222': ['1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1'], 
          'B, 223': ['1', '1', '1', '1', '0', '0', '0', '1', '1', '0', '0', '1', '1', '1', '1', '1']
      }
      

      【讨论】:

        猜你喜欢
        • 2017-07-05
        • 1970-01-01
        • 2021-06-18
        • 1970-01-01
        • 2021-05-03
        • 2021-02-19
        • 2016-10-05
        • 2015-09-16
        • 2021-01-21
        相关资源
        最近更新 更多