如何从不同的列读取csv文件中的变量和字典?

时间:2019-03-11 00:34:00

标签: python csv

因此,我有一个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]

1 个答案:

答案 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)