Python:当键丢失时从嵌套(!)字典中检索“NULL”

问题描述 投票:0回答:1

我正在处理一些来自嵌套字典的数据(通过 API)。 我想将数据存储到数据库中,我使用

psycopg2
来执行此操作,并编写了一些代码来组合我的 SQL 语句(“INSERT INTO mytable...”)。

到目前为止一切都运行良好,但有时数据并不包含所有必需的信息。在极少数情况下,其中一把钥匙丢失。这导致我的脚本崩溃。 所以我尝试了某种错误处理,因为在丢失数据的情况下,我只想用“NULL”代替。

但是,只有当我对每一条数据重复“try/ except 块”时,它才起作用。难道没有更简单的方法吗?

这是一个例子:

mydict = {'name': {'firstname': 'Peter', 'surname': 'Pan'}, 'contact': {'hometown': 'Neverland', 'phone': '123-456'}}

sql = f"INSERT INTO mytable(firstname, surname, phone)\nVALUES\n("
sql += f"'{mydict['name']['firstname']}',"
sql += f"'{mydict['name']['surname']}',"
sql += f"'{mydict['contact']['phone']}');"

对于丢失数据的情况我尝试过:

mydict = {'name': {'firstname': 'Peter', 'surname': 'Pan'}, 'contact': {'hometown': 'Neverland'}}

sql = f"INSERT INTO mytable(firstname, surname, phone)\nVALUES\n("
try:
    sql += f"'{mydict['name']['firstname']}',"
except KeyError:
    sql += 'NULL'
try:
    sql += f"'{mydict['name']['surname']}',"
except KeyError:
    sql += 'NULL'
try:
    sql += f"'{mydict['contact']['phone']}');"
except KeyError:
    sql += f"NULL);"
python dictionary nested
1个回答
0
投票

您可以将调用链接到

.get()
。例如,您可以这样做:

sql += mydict.get("name", {}).get("firstname", "NULL")

代替:

try:
    sql += f"'{mydict['name']['firstname']}',"
except KeyError:
    sql += 'NULL'

.get()
的第二个参数是密钥不存在的情况下的后备。对于第一次调用,我们返回一个空字典,这允许我们在第二次调用
"NULL"
时回退到
.get()
默认值。

© www.soinside.com 2019 - 2024. All rights reserved.