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

How to handle dictionary keys that do not exist in a loop?

我尝试解析 json 并在 Python 中使用 for 循环。 obj 是 json,如您所知,它就像字典中的字典中的字典中的字典...等等。

所以我解析 json 并将其作为一个 for 循环,如下所示:

all = obj['products']
for a in obj:
      recommendSellerScore.append(a['recommendSellerScore'])

但是,问题是 'recommendSellerScore' 关键在某些列表中不存在。

我想要的结果是在 recommendSellerScore 不存在的地方打印 'None',在 recommendSellerScore 存在的地方打印值。

for a in all:
    if a['recommendSellerScore'] in all:
        recommendSellerScore.append(a['recommendSellerScore'])
    else:
        continue
        print('None')

我 运行 上面的代码,但是由于 'recommendSellerScore' 不存在而出现错误。

for a in all:
    if ['recommendSellerScore'] in all:
        recommendSellerScore.append(a['recommendSellerScore'])
    else:
        continue
        print('None')

这个有效,但是,由于 'recommendSellerScore' 存在于字典的列表中,因此它不可迭代。 (我猜)

请修正我的代码,如有任何意见或建议,我们将不胜感激!

这是您的代码的固定版本(我去掉了 continue 语句和字符串周围的 []):

for a in all:
    if "recommendSellerScore" in a:
        recommendSellerScore.append(a["recommendSellerScore"])
    else:
        print("None")

也许类似下面的代码对您有用?

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 = 'recommendSellerScore'
a = [{key: 1}, {}]

recommendSellerScore = []
for d in a:
    score = d.get(key)
    if score is not None:
        print(score)
        recommendSellerScore.append(score)
    else:
        print('None')

编辑:正如@kederrac 所指出的,如果您的数据可以具有 {key: None} 值并且您有兴趣保留这些 None 值,那么最好询问该键是否真正存在于字典中,例如:

key = 'recommendSellerScore'
a = [{key: 1}, {key: None}]

recommendSellerScore = []
for d in a:
    if key in d.keys():
        print(d[key])
        recommendSellerScore.append(d[key])
    else:
        print('None')

它将打印:

>>> 1
>>> None