Python嵌套字典查找使用默认值

lit*_*itd 5 python lookup dictionary default-value

>>> d2
{'egg': 3, 'ham': {'grill': 4, 'fry': 6, 'bake': 5}, 'spam': 2}
>>> d2.get('spamx',99)
99
>>> d2.get('ham')['fry']
6
Run Code Online (Sandbox Code Playgroud)

我想获得火腿里面的鱼苗值,如果没有,得到值,99或88作为第二个例子.但是怎么样?

Odd*_*ing 13

d2.get('ham', {}).get('fry', 88)
Run Code Online (Sandbox Code Playgroud)

我可能会把它分解成现实生活中的几个陈述.

ham = d2.get('ham', {})
fry = ham.get('fry', 88)
Run Code Online (Sandbox Code Playgroud)

  • 而`d2.get('ham',{}).get('fry',99)`,不是吗?(干!) (3认同)

Joh*_*ooy 5

如果你需要经常这样做,你可以编写一个辅助函数

def get_nested(d, list_of_keys, default):
    for k in list_of_keys:
        if k not in d: 
            return default
        d=d[k]
    return d

print get_nested(d2,['ham','spam'],99)
print get_nested(d2,['ham','grill'],99)
Run Code Online (Sandbox Code Playgroud)