使用dict.get()方法时,NoneType是不可迭代的

时间:2019-02-27 11:58:16

标签: python json dictionary

我输入了如下所示的JSON:

{"employees": [{"foo": "bar"}]}

有时员工可以为空,也可以不存在。而不是检查dict中是否存在员工密钥,并确保它不为空,就像这样:

if employees in data and data["employees"]:

我正在使用.get()方法进行迭代,将一个空列表设置为默认值:

for i in data.get("employees", []):

但是,如果我的输入数据如下:

{"employees": None}

然后我得到错误TypeError: 'NoneType' object is not iterable。我在这里的假设是dict.get()方法仅在未定义的情况下设置默认值,并且具有NoneType值表示已定义它。

如果键存在但值为None,是否有办法将dict.get()方法设置为默认值?

1 个答案:

答案 0 :(得分:1)

  

我在这里的假设是dict.get()方法仅在未定义默认值的情况下设置默认值,而拥有NoneType值则意味着它已定义。

dict.get(key[,default=None))并未“设置”任何内容。如果该键在字典中,则返回给定键的值,否则返回default值。

  

如果键存在但值是None,是否可以将dict.get()方法设置为默认值?

不是,您必须手动执行-但这并不那么复杂,而且在您而言,甚至没有必要:

  employees = data.get("employees") or []

NB:您当然可以定义自己的dict子类,重新定义get以根据需要工作,并告诉json反序列化器使用您自己的子类而不是{ {1}},但对于这样的用例来说,这可能会有点过大了……而且毫无理由也要复杂得多。