我有一个在列表中有x个列表的结构,每个列表有x个元组。我事先不知道有多少嵌套列表,或者每个列表中有多少元组。
我想用所有的元组制作字典,因为我不知道列表的深度,所以我想使用递归我所做的是

def tupleToDict(listOfList, dictList):
    itemDict = getItems(list)  # a function that makes a dictionary out of all the tuples in list
    dictList.append(itemDict)
    for nestedList in listOfList:
         getAllNestedItems(nestedList, dictList)

    return dictList

这行得通,但我最后列了一个大单子。我宁愿在每次递归时都返回itemdict。但是,我不知道如何(如果可能)在不停止递归的情况下返回值。

最佳答案

你要找的是yield

def tupleToDict(listOfList):
    yield getItems(listofList)
    for nestedList in listOfList:
        for el in getAllNestedItems(nestedList):
            yield el

在Python3.3+中,可以用yield from替换最后两行。
您可能希望将函数重写为迭代函数:
def tupleToDict(listOfList):
    q = [listOfList]
    while q:
        l = q.pop()
        yield getItems(l)
        for nestedList in listOfList:
            q += getAllNestedItems(nestedList)

10-07 15:34