我有一个包含设备数据行的csv文件,如下所示:
#file.csv
devA,x1,y1
devB,x1,y1
devA,x2,y2
devC,x1,y1
devC,x2,y2
devA,x3,y3
我想创建一个使用键的设备名称生成数据点数组的字典:
{
'devA':[
[x1,y1],[x2,y2],[x3,y3]
],
'devB':[
[x1,y1]
],
'devC':[
[x1,y1],[x2,y2]
]
}
我尝试了以下内容:
#!/usr/bin/python
#dict.py
import csv,datetime
with open('file.dat', 'rb') as csvfile:
dataReader=csv.reader(csvfile)
book={row[0]:[row[1],row[2]] for row in dataReader}
print book
但输出
$ ./dict.py
{'devC': ['x6', 'y6'], 'devB': ['x2', 'y2'], 'devA': ['x7', 'y7']}
我想我发现问题是我的book=
行正在替换每个键的内容而不是追加。我怎样才能以“Python”方式获得所需的结果?
答案 0 :(得分:2)
您可以使用dict.setdefault
方法创建预期字典:
my_dict={}
with open('file.dat', 'rb') as csvfile:
dataReader=csv.reader(csvfile)
for name,item1,item2 in dataReader:
my_dict.setdefault(name,[]).append([item1,item2])
如果你使用的是python 3.X,你可以在你的循环中使用解压缩协议:
for name,*items in dataReader:
my_dict.setdefault(name,[]).append(items)
答案 1 :(得分:1)
您可以使用collections.defaultdict:
import collections
with open("your_file") as f:
my_dict = collections.defaultdict(list)
for line in f:
line = line.split(",")
my_dict[line[0]].append(line[1:])