我要一些数据,有时json中不存在所请求的字段。我要遍历的是一列字典,而我正在寻找该字典中的特定键。
这件事按预期工作,但希望将其转换为列表理解格式:
if x is not None:
for item in x:
print(item['param'])
我尝试了不同的事情:
# This works if data is present
y = [i['param'] for i in x if x is not None]
# But fails when it is not
TypeError: 'NoneType' object is not iterable
我认为应该先执行'if'语句,但是当前的工作方式是首先执行值。我一直在想这样的事情:
y = [x if x is not None else item['param'] for item in x]
但是这也不起作用。
有人可以向我解释我在做什么错吗?
答案 0 :(得分:0)
您可以阅读https://www.python.org/dev/peps/pep-0289/来了解生成器表达式。
[i['param'] for i in x if x is not None]
# equal
line 1: for i in x:
line 2: if x is not None:
...
# Your logic is to first determine whether the two tables exist and then iterate,
# and the logic of the code is to iterate first and then determine whether the list exists.
# The fatal problem is that when the null value is iterated,
# it will report an error and cannot enter the judgment logic.
# You can code like follows:
if x:
y = [i['param'] for i in x]
答案 1 :(得分:-3)
解决方案:
给x一个空列表的默认值,因此,如果它没有收到值,则它是[],而不是None
然后可以使用
y = [i['param'] for i in x if x]
错误:
y = [x if x is not None else item['param'] for item in x]
此处的“非”应删除。
说明:
如果您运行的行尝试遍历None,即使该部分不会运行,python也会将其视为语法错误。您对此无能为力。