基于调用参数从python函数返回多个字典

sar*_*jit 1 python

我希望我的函数根据调用参数返回多个字典.例如,如果我调用没有参数的函数,它应该返回所有字典,如果我用一个参数列表调用它,它应该从函数返回相应的字典.显然,如果我没有args或一个arg调用,它工作正常,但我有使用多个值的问题.以下示例显示了此问题.

def mydef(arg1=None):
    a = {'a1':1, 'a2':2}
    b = {'b1':1, 'b2':2}
    c = {'c1':1, 'c2':2}
    d = {'d1':1, 'd2':2}
    if arg1 is None:
        return a,b,c,d
    else:
        for x in arg1:
            if x == 'a':
                return a
            elif x == 'b':
                return b

 w,x,y,z = mydef()
 print type(w)
 print w

 s,t = mydef(['a', 'b'])
 print type(s)
 print s
 print type(t)
 print t
Run Code Online (Sandbox Code Playgroud)

怀疑:返回列表而不是dicts:

def mydef(args=None):
     dicts = { 'a' :{'a1' : 1, 'a2' :2}, 'b' : {'b1' : 1, 'b2' :2}}
     if args is None:
         args = ['a', 'b']
     return [dicts[d] for d in args]


x,y = mydef()
type(x)
>> type 'dict'

type(y)
>> type 'dict'

x = mydef(['a'])
type(x)
>> type 'list'
Run Code Online (Sandbox Code Playgroud)

Bre*_*arn 11

函数只返回一次.你不能循环并尝试在循环的每次迭代中返回一些东西; 第一个返回并结束该功能.如果你想"返回多个值",你真正需要做的就是返回一个包含所有值的值,比如值的列表或值的元组.

此外,最好将字典放在字典中(sup dawg),而不是使用局部变量来命名它们.然后你可以用钥匙把它们拿出来.

这是一种方法,它返回所选dicts的列表:

>>> def returnDicts(args=None):
...     dicts = {
...         'a': {'a1':1, 'a2':2},
...         'b': {'b1':1, 'b2':2},
...         'c': {'c1':1, 'c2':2},
...         'd': {'d1':1, 'd2':2}
...     }
...     if args is None:
...         args = ['a', 'b', 'c', 'd']
...     return [dicts[d] for d in args]
>>> returnDicts()
[{'a1': 1, 'a2': 2},
 {'b1': 1, 'b2': 2},
 {'c1': 1, 'c2': 2},
 {'d1': 1, 'd2': 2}]
>>> returnDicts(['a'])
[{'a1': 1, 'a2': 2}]
>>> returnDicts(['a', 'b'])
[{'a1': 1, 'a2': 2}, {'b1': 1, 'b2': 2}]
Run Code Online (Sandbox Code Playgroud)