命名元组的列表理解导致空列表

List comprehension of namedtuples results in empty list

我偶然发现了一个我似乎找不到答案的问题。我正在使用 csv.DictReader 读取 csv 文件的内容,并根据该信息构建命名元组列表。但是,在 运行 之后,最终结果是一个空列表。

from collections import namedtuple
import csv

nt = namedtuple('suminfo', 'a, b, c')
checklist = ['check1', 'check2', 'check3']

with open('test.csv', 'r') as csv_file:
     csv_rows = csv.DictReader(csv_file, delimiter='\t')
     tups = [nt(row['first'], row['second'], row['third']) 
            for row in csv_rows if row['first'] in checklist]

我还尝试了一个典型的普通行循环,然后是一个命名元组的列表追加,这似乎工作得很好。

为什么 listcomprehension 没有按预期运行?谢谢你的时间。

列表理解对我有用。我使用了这个测试数据(test.csv):

first   second  third
check1  1   1
check2  2   2
check3  3   3
check4  4   4

这些值由制表符分隔。当我运行你的代码时,

nt = namedtuple('suminfo', 'a, b, c')
checklist = ['check1', 'check2', 'check3']

with open('test.csv', 'r') as csv_file:
    csv_rows = csv.DictReader(csv_file, delimiter='\t')
    tups = [nt(row['first'], row['second'], row['third']) 
            for row in csv_rows if row['first'] in checklist]
    print(tups)

我得到以下结果:

>>> [suminfo(a='check1', b='1', c='1'), suminfo(a='check2', b='2', c='2'), suminfo(a='check3', b='3', c='3')]