如何检查Python列表/字典中是否存在二级(嵌套)键?

4 投票
2 回答
5761 浏览
提问于 2025-04-18 14:53

如果我用词不当,请纠正我。

我想检查一个嵌套的键是否存在于一个Python的列表或字典中。

举个例子,下面我根据某个值的键是否存在于通过Requests库的.json()方法返回的列表或字典中来给一个变量赋值(文档中并没有明确说明它具体返回什么)。

这段代码可以用来检查键是否存在于jsonassoc列表或字典的第一层:

 #works
 is_oa = jsonassoc[u'is_oa'] if u'is_oa' in jsonassoc else ""

但是,我不太确定如何检查一个键是否存在于第二层嵌套中。

我尝试过:

#doesn't work:
mendeley = jsonassoc[u'readers'][u'mendeley'] if u'readers'[u'mendeley'] in jsonassoc else "" enter code here
# neither does simply this
mendeley = jsonassoc[u'readers'][u'mendeley'] if u'mendeley' in jsonassoc else ""

我该如何检查,比如说,'mendeley'这个键,它在列表或字典中看起来像这样?

readers: {
     mendeley: '1',
     citeulike: '3',
     #etc.
}

提前感谢任何帮助!

2 个回答

2

你需要类似这样的东西:

mendeley = jsonassoc[u'readers'][u'mendeley'] if 'readers' in jsonassoc and 'mendeley' in jsonassoc['readers']

另外,你也可以用 get 函数来设置默认值:

mendeley = jsonassoc.get('readers', {}).get('mendeley', '')

还有一些库可以用来处理 JSON,这些库允许你访问不存在的键,并返回一些空值,而不是抛出错误。比如 safeJSON 这个库,就是纽约时报创建的。

14

使用字典的 .get 方法:

d.get('key1',{}).get('key2')

这样做的话,你就可以跳过对这个键是否存在的检查。

撰写回答