Python 将函数应用于列表递归的每个元素

Python 将函数应用于列表递归的每个元素,python,recursion,Python,Recursion,我有一个函数,它接受关键字作为输入,并返回相关关键字的列表。 我需要的是一个函数,它将获取相关的关键字,然后在返回的列表中的每个关键字上再次运行,以此类推,运行定义的次数 def find_related(kw): #magic happens return related_kws ''' Example: >>>find_related('eat') { 'base_kw': 'eat' 'related_kws': ['eat pasta', 'ea

我有一个函数,它接受关键字作为输入,并返回相关关键字的列表。 我需要的是一个函数,它将获取相关的关键字,然后在返回的列表中的每个关键字上再次运行,以此类推,运行定义的次数

def find_related(kw):

#magic happens

return related_kws

'''
Example:

>>>find_related('eat')
{
    'base_kw': 'eat'
    'related_kws': ['eat pasta', 'eat meat', 'eat fish']
}
'''
我需要的是这样的东西:

def difficult_function(kw, cycles):

#cycles determines number of times to run recursion
#magic beyond my league happens...

return more_related_keywords

'''
EXAMPLE #1

>>>difficult_function('eat', 2)
{
    'base_kw': 'eat'
    'related_kws': {
        'eat pasta': ['eat cold pasta', 'eat italian pasta', 'eat instant pasta'],
        'eat meat': ['eat raw meat', 'eat cow meat', 'eat roasted meat'],
        'eat fish': ['eat raw fish', 'eat rotten fish', 'eat fresh fish']
    }
}

'''

'''
EXAMPLE #2

>>>difficult_function('eat', 3)
{
    'base_kw': 'eat'
    'related_kws': {
        'eat pasta': {
            'eat cold pasta': [
                'eat cold pasta with sauce',
                'eat cold pasta and wine',
                'eat cold pasta at night'
            ],
            'eat italian pasta': [
                'eat italian cheap pasta',
                'eat best italian pasta',
                'eat italian pasta and pesto'
            ],
            'eat instant pasta': [
                'eat instant pasta snack',
                'eat instant cheese pasta',
                'eat healthy instant pasta'
            ]
        },
        'eat meat': {
            'eat raw meat': [
                'eat raw meat dangerous',
                'eat raw chicken meat',
                'eat raw meat with lemon'
            ],
            'eat cow meat': [
                'eat cow meat and salad',
                'eat cow meat and rice,
                'eat cow meat benefits'
            ],
            'eat roasted meat': [
                'eat roasted meat sandwich',
                'eat cold roasted meat',
                'don\'t eat roasted meat'
            ]
        },
        'eat fish': {
            'eat raw fish': [
                'eat raw fish sushi',
                'eat raw fish health', 'eat raw fish japanese'],
            'eat rotten fish': [
                'eat rotten fish bacteria',
                'eat rotten fish death',
                'eat rotten fish stomach'
            ],
            'eat fresh fish': [
                'eat fresh fish restaurant',
                'eat fresh fish with lemon',
                'eat fresh fish at home']
        }
    }
}
'''
我知道我应该在这里分享我已经尝试过的东西,但事实是我甚至不知道从哪里开始。有什么想法吗

编辑:

下面的函数模拟find_related(kw)的功能。我很抱歉,如果这个问题没有以恰当的方式提出,我完全是个傻瓜

import string
import random

def find_related(kw):
    # A lot of magic happens, the list comprehension
    # below simulates the magic
    related_kws = [
        kw + ' ' + ''.join(
            random.choice(string.ascii_lowercase) for 
            _ in range(4)) for i in range(3)
    ]

    results = {
        'base_kw': kw,
        'related_kws': related_kws
    }

    return results  

与给定示例匹配的模拟函数

def find_related(kw):
    '''mock function'''
    # A lot of magic happens, this simulates the magic
    d = {'eat': ['eat pasta', 'eat meat', 'eat fish'],
         'eat pasta': ['eat cold pasta', 'eat italian pasta', 'eat instant pasta'],
         'eat meat': ['eat raw meat', 'eat cow meat', 'eat roasted meat'],
         'eat fish': ['eat raw fish', 'eat rotten fish', 'eat fresh fish'],
         'eat cold pasta': ['eat cold pasta with sauce', 'eat cold pasta and wine', 'eat cold pasta at night'],
         'eat italian pasta': ['eat italian cheap pasta', 'eat best italian pasta', 'eat italian pasta and pesto'],
         'eat instant pasta': ['eat instant pasta snack', 'eat instant cheese pasta', 'eat healthy instant pasta'],
         'eat raw meat': ['eat raw meat dangerous', 'eat raw chicken meat', 'eat raw meat with lemon'],
         'eat cow meat': ['eat cow meat and salad', 'eat cow meat and rice', 'eat cow meat benefits'],
         'eat roasted meat': ['eat roasted meat sandwich', 'eat cold roasted meat', 'don\'t eat roasted meat'],
         'eat raw fish': ['eat raw fish sushi', 'eat raw fish health', 'eat raw fish japanese'],
         'eat rotten fish': ['eat rotten fish bacteria', 'eat rotten fish death', 'eat rotten fish stomach'],
         'eat fresh fish': ['eat fresh fish restaurant', 'eat fresh fish with lemon', 'eat fresh fish at home']

         }


    results = {
        'base_kw': kw,
        'related_kws': d[kw]
        }

这段代码可以执行您需要的操作。为了查看结果,我编写了它来与全局列表INP一起工作,但这一原则将适用于您

INP = ["Lorem", "Ipsum", "dolor", "atea"]

def recursive (kw, max, ref=None):

    ret = None
    if ref is None:
        ret = {'base_kw' : kw, 'related_kws' : {}}
        ref = ret ['related_kws']

    if max != 1:
        words = [' '.join (INP [0: len (INP) - max + 1]), ]
        for kw in words:
            ref [kw] = {}
            ref = ref [kw]
            recursive (kw, max -1, ref)
    else:
        ref [kw] = [' '.join (INP)]

    return ret

print (recursive ("Lorem", 3))
这是输出:

{'related_kws': {'Lorem Ipsum': {'Lorem Ipsum dolor': {'Lorem Ipsum dolor': ['Lorem Ipsum dolor atea']}}}, 'base_kw': 'Lorem'}

如果有人在寻找类似的东西,下面是答案。如果问题提得不好,我再次表示歉意

import pprint
import string
import random

def find_related(kw):
    # A lot of magic happens, the list comprehension
    # below simulates the magic
    related_kws = [
        kw + ' ' + ''.join(
            random.choice(string.ascii_lowercase) for 
            _ in range(4)) for i in range(3)
    ]
    results = {
        'base_kw': kw,
        'related_kws': related_kws
    }
    return results

def difficult_function(kw, cycles):    
    return {
        'base_kw': kw,
        'related_kws': rec_kw(kw, cycles)
    }

def rec_kw(kw, cycles):
    if cycles == 1:
        return find_related(kw)
    else:
        result = {}
        for k in find_related(kw)['related_kws']:
            result[k] = rec_kw(k, cycles-1)
        return result

pprint.pprint(difficult_function('eat', 3))

我认为我们需要一个更完整的问题规范来引导您找到解决方案。添加的单词来自哪里?应该有一个[“冷”,“意大利”,“即时”]参考某处,需要插入的信息等。感谢回复。这是一个相当大的脚本,它根据抓取、内部数据库等确定相关关键字。基本上,你给它一个kw,它将返回相关kw的列表。我编辑这个问题是为了添加一个模拟我当前函数行为的函数所以,完全缺乏代码意味着你不知道如何迭代数据结构,操作字符串,等等。这无助于您获得帮助。脚本与代码的接口结构对于设计任何解决方案都很重要。您有一组单词插入短语的中间,另一组要追加。我们不知道是什么控制了插入的程度,插入的种类等等。请阅读并遵循帮助文档中的发布指南。在这里申请。任何代码都应遵循中的指导原则。