dict.获取空返回而不是默认值



我得到了一个包含行idnamefirstnamecompany

的CSV文件

我正在使用csv.DictReader在CSV上循环,并想将一些默认值插入namefirstname(如果它们为空)

dict.get()应该执行技巧 - 但是,仅当namefirstname 从不包含任何数据时,它才能起作用。一旦它们至少包含一次数据,就会省略返回的默认值,并且 nothing 将返回

test.csv

"id","name","firstname","company"
"1","doe","john","jdoe inc"
"2","doe","jane","jdoe inc"
"3",,,"company inc"

import_csv.py

import csv
with open("test.csv") as csv_file:
    reader = csv.DictReader(csv_file)
    for row in reader:
        firstname = row.get("firstname", "Company")
        name = row.get("name", row["company"])
        company = row["company"]
        print(f"Firstname:  {firstname}")
        print(f"Name:       {name}")
        print(f"Company:    {company}n")

上述测试标题的输出为

Firstname:  john
Name:       doe
Company:    jdoe inc
Firstname:  jane
Name:       doe
Company:    jdoe inc
Firstname:
Name:
Company:    company inc

我所需的输出将为

Firstname:  john
Name:       doe
Company:    jdoe inc
Firstname:  jane
Name:       doe
Company:    jdoe inc
Firstname:  Company       # <- default value of dict.get()
Name:       company inc   # <- default value of dict.get()
Company:    company inc

dict.get()仅在未设置键时返回默认值。但是DictReader()正在设置键,带有一个空字符串作为值。那是因为该列中有一个空字符串。

实际上,DictReader()保证每个字段名称都有一个密钥集(其中从第一行中获取字段名称);如果完全缺少列,则将值设置为None

您可以使用or来琐碎地解释这一点:

firstname = row["firstname"] or "Company"
name = row["name"] or row["company"]

如果键总是在那里,则使用dict.get()是没有意义的。但是,如果将 row["firstname"]设置为一个空字符串 None,那么这是一个被认为是false的值,因此python将将另一个操作数生成 or

最新更新