我有一个包含两列的CSV,第一列是专门用于我们项目中特定建筑的团队。
第二列是实际建筑物编号。
我要找的是一个字典,其中第一列为关键,列表中属于该团队的建筑物。
我尝试了各种形式的csv.reader
和csv.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"]
答案 0 :(得分:1)
标准库中有用的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
。
答案 1 :(得分: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']}