Python 如何处理循环中不存在的字典键?

Python 如何处理循环中不存在的字典键?,python,dictionary,for-loop,jsonparser,Python,Dictionary,For Loop,Jsonparser,我尝试解析json并在Python中使用for循环。 obj是json,正如你们所知,它就像字典中的字典列表中的字典……等等 因此,我解析json并将其作为for循环,如下所示: all = obj['products'] for a in obj: recommendSellerScore.append(a['recommendSellerScore']) 但是,问题是一些列表中不存在关键的“RecommendersCore” 因此,我希望在RecommendersCore不存在

我尝试解析json并在Python中使用for循环。
obj
是json,正如你们所知,它就像字典中的字典列表中的字典……等等

因此,我解析json并将其作为
for
循环,如下所示:

all = obj['products']
for a in obj:
      recommendSellerScore.append(a['recommendSellerScore'])
但是,问题是一些列表中不存在关键的“RecommendersCore”

因此,我希望在
RecommendersCore
不存在的位置打印
'None'
,并在
RecommendersCore
存在的位置打印值

for a in all:
    if a['recommendSellerScore'] in all:
        recommendSellerScore.append(a['recommendSellerScore'])
    else:
        continue
        print('None')
我在上面运行了这段代码,但由于
'RecommendersCore'
不存在而出错

for a in all:
    if ['recommendSellerScore'] in all:
        recommendSellerScore.append(a['recommendSellerScore'])
    else:
        continue
        print('None')
然而,这一个有效,因为字典中的列表中存在“RecommendersCore”,所以它是不可移植的。(我猜)


请修改我的代码,任何意见或建议将不胜感激

这里是代码的固定版本(我取出
continue
语句和字符串周围的
[]
):


下面是代码的固定版本(我取出了
continue
语句和字符串周围的
[]
):


也许下面的代码对你有用

for a in all:
    if a.get(['recommendSellerScore']) is not None:
        recommendSellerScore.append(a['recommendSellerScore'])
  else:
      print("None")
      # No need for continue here.

也许下面的代码对你有用

for a in all:
    if a.get(['recommendSellerScore']) is not None:
        recommendSellerScore.append(a['recommendSellerScore'])
  else:
      print("None")
      # No need for continue here.

您可以使用字典的
get
方法尝试访问字典值,如果键不存在,您可以提供默认值,如果不指定默认值,它将输出
None
,例如:

key='RecommendersCore'
a=[{key:1},{}]
RecommendersCore=[]
对于a中的d:
得分=d.get(关键)
如果分数不是零:
打印(分数)
RecommendersCore.append(分数)
其他:
打印('无')
编辑:正如@kederrac所指出的,如果您的数据可以有
{key:None}
值,并且您有兴趣保留这些
None
值,那么最好询问该键是否确实存在于字典中,例如:

key='RecommendersCore'
a=[{key:1},{key:None}]
RecommendersCore=[]
对于a中的d:
如果输入d.keys():
打印(d[键])
recommendSellerScore.append(d[键])
其他:
打印('无')
它将打印:

>>> 1
>>> None 

您可以使用字典的
get
方法尝试访问字典值,如果键不存在,您可以提供默认值,如果不指定默认值,它将输出
None
,例如:

key='RecommendersCore'
a=[{key:1},{}]
RecommendersCore=[]
对于a中的d:
得分=d.get(关键)
如果分数不是零:
打印(分数)
RecommendersCore.append(分数)
其他:
打印('无')
编辑:正如@kederrac所指出的,如果您的数据可以有
{key:None}
值,并且您有兴趣保留这些
None
值,那么最好询问该键是否确实存在于字典中,例如:

key='RecommendersCore'
a=[{key:1},{key:None}]
RecommendersCore=[]
对于a中的d:
如果输入d.keys():
打印(d[键])
recommendSellerScore.append(d[键])
其他:
打印('无')
它将打印:

>>> 1
>>> None 


不要在中使用“something”,因为如果在值中找到“something”,它可能无法正常工作
.keys()中的“something”更安全、更明确。@Guimoute你错了,
中的“something”与a.keys()中的“something”相同。这是目前为止最好的答案;)@kederrac我的错,我混淆了
dictview
s。明确检查键或值仍然是一个好主意。@Guimoute感谢您的建议!它与“.keys()”一起工作。作为结果,我使用的代码是:对于a,总之:a.keys()中的if“RecommendersCore”:RecommendersCore.append(a[“RecommendersCore”])else:RecommendersCore.append(“None”)不要在中使用
“something”,因为如果在值中找到“something”,它可能无法正常工作
.keys()中的“something”更安全、更明确。@Guimoute你错了,
中的“something”与a.keys()中的“something”相同。
这是目前为止最好的答案;)@kederrac我的错,我混淆了
dictview
s。明确检查键或值仍然是一个好主意。@Guimoute感谢您的建议!它与“.keys()”一起工作。作为结果,我使用的代码是:对于a中的所有:如果a.keys()中的“RecommendersCore”:RecommendersCore.append(a[“RecommendersCore”]),否则:RecommendersCore.append(“无”)不能将列表作为dict中的键,你的代码应该引发:
TypeError:unhabable type:'list'
你也不能在列表中使用
dict.get
。OP说
obj
是json->因此被翻译成字典,在json加载后,在你的第一个评论中,你考虑将
a
作为dict,你不能将列表作为dict中的键,你的代码应该引发:
TypeError:unhabable type:'list'
你也不能在列表中使用
dict.get
。OP说
obj
是json->因此在json加载后被翻译成字典。在你的第一次评论中,你考虑将
a
作为dict@hitter谢谢你的回答。我可以知道如何对评论进行投票吗?只有我能看到评论上有一面旗帜。@hitter谢谢你的回答。我可以知道如何对评论进行投票吗?我唯一能看到的是注释上的标志。如果
a=[{key:None},{}]
怎么办?您的代码将无法存储在
RecommendersCore
None
value@kederrac,true,在这种情况下,请参见
Edit
。如果您有
a=[{key:1},{key:None},{1:1}]
?如果
a=[{key:None},{}]
?您的代码将无法存储在
RecommendersCore
None
value@kederrac,true,在这种情况下,请参见
编辑