如果我有一个dict,d我想在d['e']['foo']['bar']
检查一个值,其中e和foo是字典,而bar给出一个字符串,什么是SAFELY获取该位置值的方法?除了尝试捕获之外还有什么吗?
答案 0 :(得分:3)
一种好方法是使用class Node:
def __init__(self):
self.data = None
self.next = None
def getData(self):
return self.data
def getNext(self):
return self.next
def setData(self,newdata):
self.data = newdata
def setNext(self,newnext):
self.next = newnext
class Stack :
def _init_(self):
self.head=None
def push(self,data):
temp=Node()
temp.setData(data)
temp.setNext(self.head)
self.head=temp
def pop(self):
temp=Node()
temp=self.getData()
self.head=self.head.getNext()
return temp
。
reduce
您可以制作d={'e':{'foo':{'bar':"final value"}}}
l=['e','foo','bar']
print reduce(lambda x,y:x.get(y),l, d)
并将function
传递给它。
输出:list
答案 1 :(得分:1)
将get
与默认的空字典一起使用:
>>> d = {'e':{'foo':{'bar':0}}}
>>> print(d.get('e', {}).get('foo', {}).get('bar'))
0
>>> print(d.get('f', {}).get('doo', {}).get('car'))
None
>>> print(d.get('e', {}).get('foo', {}).get('car'))
None
>>> print(d.get('e', {}).get('doo', {}).get('bar'))
None
答案 2 :(得分:1)
一种方法是沿着这些方向使用简单的辅助函数:
def dive(d, *ks):
for k in ks:
if isinstance(d, dict) and k in d:
d = d[k]
else:
return None
return d
examples = [
{},
{'e': {'foo': 12}},
{'e': {'foo': {'bar': 999}}},
]
for i, e in enumerate(examples):
print(i, dive(e, 'e', 'foo', 'bar'))
输出:
(0, None)
(1, None)
(2, 999)
答案 3 :(得分:0)
确保键在此词典中,您可以试试这个:
if "e" in d:
print d["e"]
或尝试使用get方法,如果密钥不可用,则返回默认值。
如果key在字典中,则返回key的值,否则返回default。如果 默认情况下没有给出,默认为None,所以这个方法永远不会 提出了一个KeyError。
d.get("e","default value")