2024-04-27 19:08:03 发布
网友
我在下面列出了要添加到字典中的项目:
COLS = ['CUST', 'MODEL', 'SN', 'DATE', 'CHARGE', 'QTY', 'TOTAL'] with open('UserfeeInvoicing.csv', 'r') as infile: ranpak_dict = { row[2]: dict(zip(COLS, row)) for row in csv.reader(infile) }
有没有只添加CHARGE =/= 0或{}的记录
CHARGE =/= 0
您可以执行以下操作:
ranpak_dict = {} COLS = ['CUST', 'MODEL', 'SN', 'DATE', 'CHARGE', 'QTY', 'TOTAL'] with open('UserfeeInvoicing.csv', 'r') as infile: reader = csv.reader(infile) for row in reader: if float(row[COLS.index('CHARGE')]) >= 0: ranpak_dict[row[2]] = dict(zip(COLS, row))
与其使用csv.reader(),不如使用^{} object。该对象使创建字典和筛选行变得更加容易;您的代码经过重构后使用DictReader(),如下所示:
csv.reader()
DictReader()
COLS = ['CUST', 'MODEL', 'SN', 'DATE', 'CHARGE', 'QTY', 'TOTAL'] with open('UserfeeInvoicing.csv', 'r') as infile: reader = csv.DictReader(infile, fieldnames=COLS) ranpak_dict = {row['SN']: row for row in reader}
csv.DictReader()对象所做的正是您的dict(zip(COLS, row))调用所做的工作;给定一系列字段名,从每一行构建一个字典。在
csv.DictReader()
dict(zip(COLS, row))
在列表、dict或set comprehension中进行筛选的工作方式与添加其他循环一样;只需将if <condition>添加到循环中:
if <condition>
注意int()调用;我假设CHARGE列总是包含数字。在
int()
CHARGE
如果文本字段都是用引号括起来的,还可以设置^{},此时所有没有引号的列都会自动转换为float。这样可以把代码减少到:
float
reader = csv.DictReader(infile, fieldnames=COLS, quoting=csv.QUOTE_NONNUMERIC) ranpak_dict = {row['SN']: row for row in reader if row['CHARGE'] > 0}
您可以执行以下操作:
与其使用} object 。该对象使创建字典和筛选行变得更加容易;您的代码经过重构后使用
csv.reader()
,不如使用^{DictReader()
,如下所示:csv.DictReader()
对象所做的正是您的dict(zip(COLS, row))
调用所做的工作;给定一系列字段名,从每一行构建一个字典。在在列表、dict或set comprehension中进行筛选的工作方式与添加其他循环一样;只需将
^{pr2}$if <condition>
添加到循环中:注意
int()
调用;我假设CHARGE
列总是包含数字。在如果文本字段都是用引号括起来的,还可以设置^{} ,此时所有没有引号的列都会自动转换为
float
。这样可以把代码减少到:相关问题 更多 >
编程相关推荐