我想阅读并存储在defaultdict(list)
个csv文件中:
Pos ID Name
1 0001L01 50293
2 0002L01 128864
3 0003L01 172937
4 0004L01 12878
5 0005L01 demo
6 0004L01 12878
7 0004L01 12878
8 0005L01 demo
我希望ID
成为我的密钥,并将其作为值Pos
和名称。但Pos
的数量会有所不同。例如,ID 0005L01
包含Pos
8和5,而0001L01
包含Pos
1.有没有办法做到这一点?
到目前为止,我得到了:
reader = csv.reader(open("sheet.csv", "rb"))
for row in reader:
if any(row):
dlist.append(row)
for k, g in groupby(zip(mylist, itertools.count()), key=lambda x: x[0][1]):
map(lambda x: d[k].append((x[0][0], x[1], x[0][2])), g)
答案 0 :(得分:2)
您可以使用dict.setdefault
方法创建预期字典:
import csv
d={}
with open('my_file.csv', 'rb') as csvfile:
spamreader = csv.reader(csvfile, delimiter=' ')
for row in spamreader:
try :
Pos,ID,Name=row
d.setdefault(ID,[]).append([Pos,Name])
except ValueError :
continue
结果:
{'0001L01': [['1', '50293']],
'0003L01': [['3', '172937']],
'0002L01': [['2', '128864']],
'0005L01': [['5', 'demo'], ['8', 'demo']],
'0004L01': [['4', '12878'], ['6', '12878'], ['7', '12878']]}
正如@tobias_k所说,如果您的文件中没有pos
列,则可以使用enumerate
手动创建:
import csv
d={}
with open('my_file.csv', 'rb') as csvfile:
spamreader = csv.reader(csvfile, delimiter=' ')
for Pos,row in enumerate(spamreader,1):
try :
ID,Name=row
d.setdefault(ID,[]).append([Pos,Name])
except ValueError :
continue