命名元组的列表理解导致空列表
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')]
我偶然发现了一个我似乎找不到答案的问题。我正在使用 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')]