我输入了如下所示的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()
方法设置为默认值?
答案 0 :(得分:1)
我在这里的假设是dict.get()方法仅在未定义默认值的情况下设置默认值,而拥有NoneType值则意味着它已定义。
dict.get(key[,default=None))
并未“设置”任何内容。如果该键在字典中,则返回给定键的值,否则返回default
值。
如果键存在但值是None,是否可以将dict.get()方法设置为默认值?
不是,您必须手动执行-但这并不那么复杂,而且在您而言,甚至没有必要:
employees = data.get("employees") or []
NB:您当然可以定义自己的dict子类,重新定义get
以根据需要工作,并告诉json
反序列化器使用您自己的子类而不是{ {1}},但对于这样的用例来说,这可能会有点过大了……而且毫无理由也要复杂得多。