Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将Jupyter小部件下拉列表传递到第二个下拉列表_Python_Jupyter Notebook - Fatal编程技术网

Python 将Jupyter小部件下拉列表传递到第二个下拉列表

Python 将Jupyter小部件下拉列表传递到第二个下拉列表,python,jupyter-notebook,Python,Jupyter Notebook,我有一个问题是关于如何使用jupyter小部件,即下拉菜单来生成工作流。目前我的意图不起作用,我的目标是: def league_interact(): choice = interact(team_names, league_select=league_names()) return type(choice) league_interact() 运行生成列表的函数 这个列表被输入到一个下拉列表中,我从中选择一个(x) x指的是另一个函数,它有一个字典,它拾取与该键相关的所有值

我有一个问题是关于如何使用jupyter小部件,即下拉菜单来生成工作流。目前我的意图不起作用,我的目标是:

def league_interact():
    choice = interact(team_names, league_select=league_names())
    return type(choice)
league_interact()
  • 运行生成列表的函数
  • 这个列表被输入到一个下拉列表中,我从中选择一个(x)
  • x指的是另一个函数,它有一个字典,它拾取与该键相关的所有值,并生成另一个列表
  • 该列表被输入到另一个下拉列表中,我从中选择一个值进行处理
  • 我要提出的问题是,我可以生成第一个列表并将其输入下拉列表。然而,随后的列表并没有被捕获,而是函数被捕获,这当然会失败。让我用一些代码来说明:

    这段代码只需遍历字典列表,并将所有唯一的league实例放入一个列表中:

    def league_names():
        league_list = []
        data_filenames = [data_file for data_file in os.listdir() 
                  if data_file.endswith('.json')]
        with open(data_filenames[0]) as json_file:
            data = json.load(json_file)
        for x in data:
            if x['Competition'] is not None and x['Competition'] not in league_list:
                league_list.append(x['Competition'])
        return league_list[1:]
    
    接下来要做的是,获取该列表,搜索同一组字典,搜索属于该联盟的所有球队,并将它们添加到列表中

    def team_names(league_select):
        team_list = []
        data_filenames = [data_file for data_file in os.listdir() 
                  if data_file.endswith('.json')]
        with open(data_filenames[0]) as json_file:
            data = json.load(json_file)
        for x in data:
            if x['Competition'] == league_select and x['Team'] not in team_list:
                team_list.append(x['Team'])
        return team_list
    
    我想与之互动的是,第一个联赛列表被传递到一个下拉列表,从中选择一个联赛。这将把联盟转移到第二个功能,吸引所有球队。如何做到这一点取决于以下几点:

    def league_interact():
        choice = interact(team_names, league_select=league_names())
        return type(choice)
    league_interact()
    
    现在这项工作成功了,列表被成功地传递了,但是我无法工作的是,从这里开始的交互被转换成一个变量,然后我可以传递给后续的函数进行进一步的处理

    下面是json内容的一个示例:

    [{"Team": "Yeovil Town FC", "Gender": "M", "Competition": "National League", "Earliest Season": "2003-2004", "Latest Season": "2020-2021", "Total Seasons": "18", "Championships": "1", "Other Names": "", "Code": "bd5179b9", "Prefix": "Yeovil-Town-Stats"}, 
    {"Team": "Yeovil Town LFC", "Gender": "F", "Competition": "", "Earliest Season": "2017", "Latest Season": "2018-2019", "Total Seasons": "3", "Championships": "", "Other Names": "", "Code": "a506e4a2", "Prefix": "Yeovil-Town-Women-Stats"}, 
    {"Team": "York City FC", "Gender": "M", "Competition": "", "Earliest Season": "2002-2003", "Latest Season": "2019-2020", "Total Seasons": "13", "Championships": "0", "Other Names": "", "Code": "e272e7a8", "Prefix": "York-City-Stats"}, 
    {"Team": "Yorkshire Amateur AFC", "Gender": "M", "Competition": "", "Earliest Season": "2019-2020", "Latest Season": "2020-2021", "Total Seasons": "0", "Championships": "", "Other Names": "", "Code": "66379800", "Prefix": "Yorkshire-Amateur-AFC-Stats"}]
    
    问题:在上述情况下,我将如何使用interact生成由第一个选项创建的列表,而不是函数?我把类型拉到这里,它是一个“函数”,而不是预期的列表。我试着使用.value和一些导数,但没有一个能给出一个值。知道如何处理这个问题吗,这样我就可以生成第二个下拉列表了

    我尝试了以下操作,但出现错误:

    def league_interact():
        choice = interact(team_names, league_select=league_names())
        return choice
    def team_interact():
        choice2 = interact(team_code, team_select=league_interact())
    team_interact()
    
    错误:ValueError:无法转换为小部件


    谢谢!我确实浏览了文档,但如何处理这个问题我并不十分感兴趣。

    好的,所以我实际上设法解决了这个问题:

    @interact(league = league_box)
    def choose_both(league):
        team_box.options = team_names(league_box.value)
        return
    
    @interact_manual(team = team_box, use_season = season_box)
    def choose_team(team, use_season):
        return team_choice_cap(team_data(team),use_season)
    
    def team_choice_cap(data_set, use_season):
        code = data_set['Code']
        prefix = data_set['Prefix']
        return parse_seasons(code,prefix,use_season)
    
    上面的interact和interact_手册可用于为后一个列表提供信息,然后通过手动调用调用其余细节