[英]How to return nested dictionary from function
是否可以制作一个 function ,它将根据 arguments 返回一个嵌套的字典?
def foo(key):
d = {'a': 1, 'b': 2, 'c': {'d': 3, 'e': 4}, }
return d[key]
foo(['c']['d'])
我在等待:
3
我越来越:
TypeError: list indices must be integers or slices, not str
我了解可以返回整个字典,或对其进行硬编码以返回字典的特定部分,例如
if 'c' and 'd' in kwargs:
return d['c']['d']
elif 'c' and 'e' in kwargs:
return d['c']['e']
但它会非常不灵活
当您给出['c']['d']
时,您使用字母d
对列表['c']
进行切片,这是不可能的。 所以你可以做的是,更正切片:
foo('c')['d']
或者你可以改变你的 function 来切片它:
def foo(*args):
d = {'a': 1, 'b': 2, 'c': {'d': 3, 'e': 4}, }
d_old = dict(d) # if case you have to store the dict for other operations in the fucntion
for i in args:
d = d[i]
return d
>>> foo('c','d')
3
d = {'a': 1, 'b': 2, 'c': {'d': 3, 'e': 4}, }
def funt(keys):
val = d
for key in keys:
if val:
val = val.get(key)
return val
funt(['c', 'd'])
另外要处理不存在的密钥 state。
一种可能的解决方案是迭代多个键 -
def foo(keys, d=None):
if d is None:
d = {'a': 1, 'b': 2, 'c': {'d': 3, 'e': 4}, }
if len(keys) == 1:
return d[keys[0]]
return foo(keys[1:], d[keys[0]])
foo(['c', 'd'])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.