因此,我有一个CSV文件,其中有2列,其中一列是字典键(键的所有值均为1),一列时间是最后一个时间,仅在一个单元格中。我发现了一个有效的代码,但似乎有点多余,想知道是否有人知道将其缩短的方法?
with open('coors.csv', mode='r') as infile:
reader = csv.reader(infile)
next(reader, None)
mydict = {columns[0]:1 for columns in reader}
with open('coors.csv', mode='r') as infile:
reader = csv.reader(infile)
next(reader, None)
time = [columns[1] for columns in reader][0]
我尝试过如下编写它,但是有人可以解释为什么那没用
with open('coors.csv', mode='r') as infile:
reader = csv.reader(infile)
next(reader, None)
mydict = {columns[0]:1 for columns in reader}
time = [columns[1] for columns in reader][0]
答案 0 :(得分:1)
csv.reader
返回一个可迭代对象,因此一旦迭代耗尽了它,它将不再产生更多的项目,除非您执行文件搜索以重置文件指针。
出于您的目的,您只需使用zip
将两列配对,然后将它们拆成两个列表即可。由于您只需要第一次,因此您可以进一步解压缩第二个列表的包装以提取第一个项目。然后,您可以使用dict.fromkeys
方法从键列表中构建字典:
with open('coors.csv', mode='r') as infile:
reader = csv.reader(infile)
next(reader, None)
keys, (time, *_) = zip(*reader)
mydict = dict.fromkeys(keys, 1)