使用第一列作为键将双列CSV文件读取为字典

4
我有一个包含两列的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"]

你的数据末尾有逗号吗? - dawg
2个回答

5

这是有效的:

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

注:该内容为介绍Python中collections模块中的defaultdict类的初始化方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接