使用条件将键/值添加到字典

2024-04-27 19:08:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我在下面列出了要添加到字典中的项目:

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或{}的记录


Tags: csv项目datemodel字典withdictinfile
2条回答

您可以执行以下操作:

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(),如下所示:

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))调用所做的工作;给定一系列字段名,从每一行构建一个字典。在

在列表、dict或set comprehension中进行筛选的工作方式与添加其他循环一样;只需将if <condition>添加到循环中:

^{pr2}$

注意int()调用;我假设CHARGE总是包含数字。在

如果文本字段都是用引号括起来的,还可以设置^{},此时所有没有引号的列都会自动转换为float。这样可以把代码减少到:

reader = csv.DictReader(infile, fieldnames=COLS, quoting=csv.QUOTE_NONNUMERIC)
ranpak_dict = {row['SN']: row for row in reader if row['CHARGE'] > 0}

相关问题 更多 >