使用递归

时间:2018-04-12 00:55:46

标签: python-3.x

我正在尝试为学校项目建立一个带递归的字典。现在我觉得我已经找到了一般的结构,但是我无法弄清楚如何获得return语句来连接字典的各个部分。

我意识到通过构建一个空字典然后添加它可能会更容易,但我想知道是否有任何技巧我可以使用。

我正在寻找的输出是:

print(recur_join([1,2,3], ['a', 'b', 'c']))
>>> {1: 'a', 2 : 'b', 3 : 'c'}

我从另一个答案尝试了.update()和dict(basket_one,** basket_two)形式的东西。我可能用错了。我正在使用python 3。

以下是我的代码:

def recur_join(list1, list2):

    if len(list1) == len(list2):

        if len(list1) == 1:
            return {list1[0]: list2[0]}

        elif len(list1) > 1:
            # dict(basket_one, **basket_two)
            #return dict({list1[0]: list2[0]}, **recur_join(list1[1:], 
    list2[1:]))
            return {list1[0]: list2[0]}.update(recur_join(list1[1:], list2[1:]))

    else:
        print('lists do not match in size')
        return 0

任何帮助将不胜感激,如果以前得到回答,请抱歉。 谢谢!

2 个答案:

答案 0 :(得分:2)

我建议您不要使用递归并改为使用字典理解:

def recur_join(list1, list2):
    if len(list1) != len(list2):
        print('lists do not match in size')
        return
    else: return {list1[i]:list2[i] for i in range(len(list1))}

对于递归路线(警告:非常难看):

def recur_join(list1, list2):
    if len(list1) != len(list2):
        print('lists do not match in size')
        return
    elif list1 == [] and list2 == []:
        return {}
    else:
        return dict(list({list1[0]: list2[0]}.items()) + list(recur_join(list1[1:], list2[1:]).items()))

答案 1 :(得分:1)

“清理”递归解决方案。我会亲自使用Primusa的字典 理解解决方案。

def recur_join(list1, list2):
    cur = {}
    if len(list1) == len(list2) and len(list1) > 0:
        cur = {list1[0]: list2[0]}
        if len(list1) > 1:
            cur.update(recur_join(list1[1:], list2[1:]))
    else:
        print('lists do not match in size')
    return cur