【问题标题】:Read two column CSV as dict with 1st column as key读取两列 CSV 作为字典,第一列作为键
【发布时间】:2013-07-26 01:18:40
【问题描述】:

我有一个包含两列的 CSV,第一列是我们项目中致力于特定建筑的团队。

第二列是实际的楼号。

我正在寻找的是一个字典,其中第一列作为键,列表中属于该团队的建筑物。

我尝试了各种形式的 csv.readercsv.DictReader 以及不同的 for 循环来将数据重写到另一个字典,但我无法获得我想要的结构。

CSV:

team,bldg,
3,204,
3,250,
3,1437,
2,1440,
1,1450,

字典的结构如下:

dict["1"] = ["1450"]
dict["2"] = ["1440"]
dict["3"] = ["204", "250", "1437"]

【问题讨论】:

  • 您的数据是否有尾随,

标签: python csv


【解决方案1】:

这行得通:

import csv

result={}
with open('/tmp/test.csv','r') as f:
    red=csv.DictReader(f)
    for d in red:
        result.setdefault(d['team'],[]).append(d['bldg'])

#results={'1': ['1450'], '3': ['204', '250', '1437'], '2': ['1440']}

【讨论】:

    【解决方案2】:

    标准库中有用的collections.defaultdict 可以轻松完成这项任务:

    import csv
    import collections as co
    
    dd = co.defaultdict(list)
    with open('/path/to/your.csv'),'rb') as fin:
        dr = csv.DictReader(fin)
        for line in dr:
            dd[line['team']].append(line['bldg'])
    
    # defaultdict(<type 'list'>, {'1': ['1450'], '3': ['204', '250', '1437'], '2': ['1440']})
    

    http://docs.python.org/2/library/collections.html#collections.defaultdict

    第一个参数提供default_factory 的初始值 属性;默认为None

    【讨论】:

      猜你喜欢
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 2016-09-01
      • 2017-09-26
      相关资源
      最近更新 更多