Python 用于检查二维嵌套内部字典中的键的单行代码
是否有一个单行方法来检查Python 2d dict是否有一个内部键/值 现在我做的事情是这样的:Python 用于检查二维嵌套内部字典中的键的单行代码,python,Python,是否有一个单行方法来检查Python 2d dict是否有一个内部键/值 现在我做的事情是这样的: if d.has_key(k1): if d[k1].has_key(k2): # do something 有更好的方法吗 谢谢 如果您不关心k1是否真的存在,而只想知道k2是否存在于其中(如果它确实存在的话),那么上面的片段很好。正如您从我的代码片段中看到的,我更喜欢in操作符,但您也可以很容易地说 if d.get(k1, {}).has_key(k2):
if d.has_key(k1):
if d[k1].has_key(k2):
# do something
有更好的方法吗
谢谢
如果您不关心k1是否真的存在,而只想知道k2是否存在于其中(如果它确实存在的话),那么上面的片段很好。正如您从我的代码片段中看到的,我更喜欢in
操作符,但您也可以很容易地说
if d.get(k1, {}).has_key(k2):
# do something
如果您更喜欢这种习惯用法,但Python3.x中的
has_key
方法已被弃用,那么您可能应该避免使用它。您可以在中使用:
if k1 in d and k2 in d[k1]:
has_key
方法已被弃用,并在Python3.x中被删除
相关的:
不要使用has\u key()
使用get()
因为has\u key()
在python 3.x中已被弃用:
d.get(k1,None) and d[k1].get(k2,None):
你第一个问题的答案是肯定的。我认为艾利的回答
if k2 in d.get(k1, {}):
最好的一行,因为它可以避免在d中查找k1两次。第二个问题的答案取决于如果其中一个测试失败,您想做什么,以及您是否想在两个失败案例中做些不同的事情。如果是:
try:
d1 = d[k1]
if k2 in d1:
<both tests passed>
else:
<second test failed>
except KeyError:
<first test failed>
试试看:
d1=d[k1]
如果d1中有k2:
其他:
除KeyError外:
我没有足够的声誉发表评论,但请注意,如果key1的值为None,则最重要的建议将失败
if k2 in d.get(k1, {}):
# do something
如果d={'k1':None}
则失败,因此请确保您的密钥的值。Python习惯用法是,请求原谅比请求许可更好。您可以使用try/except。has_key()
方法在python 3.x中已被弃用
try:
d1 = d[k1]
if k2 in d1:
<both tests passed>
else:
<second test failed>
except KeyError:
<first test failed>
if k2 in d.get(k1, {}):
# do something