如何检查python list / dict中是否存在第二层(嵌套)密钥?

时间:2014-07-26 18:15:25

标签: python list dictionary multidimensional-array nested

如果我的任何术语有误,请纠正我。

我试图检查python list / dict中是否存在嵌套键。

例如,下面我根据Requests' library's .json() method返回的列表/字典中是否存在该值的键来为变量分配值(文档中不清楚)究竟是什么回报了。)

这适用于检查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' key,在list / dict中看起来像这样?

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

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:12)

使用字典.get方法:

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

这样做你将绕过检查密钥。

答案 1 :(得分: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是由纽约时报创建的图书馆。