Python 用于检查二维嵌套内部字典中的键的单行代码

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):

是否有一个单行方法来检查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):
    # 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