Python 嵌套字典查找及默认值

11 投票
5 回答
7233 浏览
提问于 2025-04-16 02:31
>>> d2
{'egg': 3, 'ham': {'grill': 4, 'fry': 6, 'bake': 5}, 'spam': 2}
>>> d2.get('spamx',99)
99
>>> d2.get('ham')['fry']
6

我想要获取“ham”里面的“fry”的值,如果没有的话,就获取99或者88,像第二个例子那样。可是,我该怎么做呢?

5 个回答

4

为了让默认值的获取正常工作,第一个默认值需要是一个字典,这样如果第一个获取失败,你才能正确地继续调用后面的 .get 方法。

d.get('ham',{}).get('fry',88)

你也可以使用 try 和 except 这个结构来处理错误。

def get_ham_fry()
  try:
    return d['ham']['fry']
  except AttributeError,e:
    return 88
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)
19
d2.get('ham', {}).get('fry', 88)

在实际生活中,我可能会把它分成几个简单的语句来处理。

ham = d2.get('ham', {})
fry = ham.get('fry', 88)

撰写回答