繁体   English   中英

如何从 function 返回嵌套字典

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM