如何处理循环中不存在的字典键?
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
我尝试解析 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