Keep some keys in my list with comprehension?
我有一个从.csv中提取的大列表:
1 2 3 | CSV_PATH = 'myfile.csv' CSV_OBJ = csv.DictReader(open(CSV_PATH, 'r')) CSV_LIST = list(CSV_OBJ) |
我只想保留其中的一些列:
1 | KEEP_COLS = ['Name', 'Year', 'Total Allocations', 'Enrollment']' |
号
从安全地从字典中删除多个键来看,这应该是可行的:
1 | BETTER = {k: v for k, v in CSV_LIST if k not in KEEP_COLS} |
但我得到了一个错误:
根据要求,一块csv列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | {'EIN': '77-0000091', 'FR': '28.4', 'Name': 'Org A', 'Enrollment': '506', 'Total Allocations': '$34214', 'geo_latitude': '37.9381775755', 'geo_longitude': '-122.3146910612', 'Year': '2009'}, {'EIN': '77-0000091', 'FR': '28.4', 'Name': 'Org A', 'Enrollment': '506', 'Total Allocations': '$34214', 'geo_latitude': '37.9381775755', 'geo_longitude': '-122.3146910612', 'Year': '2010'} |
。
在司令部,我可以做
另一种选择是使用
1 | CSV_LIST = map(operator.itemgetter(*KEEP_LIST), CSV_OBJ) |
这将创建具有所需列的元组列表。
您的字典理解能力很好,但是由于您有一个字典列表,所以必须使用该字典对单个列表项的理解创建一个列表理解。另外,由于您想保留这些列,我想您应该删除该
1 | [{k: v for k, v in d.items() if k in KEEP_COLS} for d in CSV_LIST] |
问题是,
但是,如果你担心自己是个Python,为什么要把一个
1 2 3 | with open(CSV_PATH, 'r') as f: for row in csv.DictReader(f): process(row['Name'],row['Year'],row['Total Allocations'],row['Enrollment']) |
号