猿问

如何在嵌套字典中搜索给定值

我有一本看起来像这样的字典:


{'Week 1': {'Game1': {'Away': 'Team3', 'Home': 'Team2', 'Venue': 5},

            'Game2': {'Away': 'Team1', 'Home': 'Team4', 'Venue': 6}},

 'Week 2': {'Game1': {'Away': 'Team1', 'Home': 'Team2', 'Venue': 4},

            'Game2': {'Away': 'Team4', 'Home': 'Team3', 'Venue': 1}},

 'Week 3': {'Game1': {'Away': 'Team1', 'Home': 'Team3', 'Venue': 6},

            'Game2': {'Away': 'Team2', 'Home': 'Team4', 'Venue': 4}} 

...}

该词典包含由“周”、“比赛”、“主场”、“客场”和“场馆”分隔的固定装置。


假设我想从上面的字典中搜索“Team 1”的所有固定装置并获得以下输出:


{'Week 1': {'Game 2': {'Away: ': 'a', 'Home: ': 'd', 'Rink ': 6}},

 'Week 2': {'Game1': {'Away: ': 'a', 'Home: ': 'b', 'Rink ': 4}},

 'Week 3': {'Game1': {'Away: ': 'a', 'Home: ': 'c', 'Rink ': 6}}}

最好的方法是什么?


我试过使用 for 循环


for week, games in dict:

    for game, details in games:

        for k, v in details:

            if v == 'Team1'

               newDict.update({week: {game: details}})

但我明白了ValueError: too many values to unpack


我是在正确的路线上,还是完全偏离了基地?任何帮助将不胜感激


米琪卡哇伊
浏览 131回答 3
3回答

繁花不似锦

字典理解:{match: {game: details} for match, games in a.items() for game, details in games.items() for k, v in details.items() if v == 'Team1'}

千万里不及你

你也可以这样做:{  week: {game: info}  for week, games in weeks  for game, info in games  if team in (info['Away'], info['Home'])}把它们放在一起:>>> weels = {'Week 1': {'Game1': {'Away': 'Team3', 'Home': 'Team2', 'Venue': 5},...             'Game2': {'Away': 'Team1', 'Home': 'Team4', 'Venue': 6}},...  'Week 2': {'Game1': {'Away': 'Team1', 'Home': 'Team2', 'Venue': 4},...             'Game2': {'Away': 'Team4', 'Home': 'Team3', 'Venue': 1}},...  'Week 3': {'Game1': {'Away': 'Team1', 'Home': 'Team3', 'Venue': 6},...             'Game2': {'Away': 'Team2', 'Home': 'Team4', 'Venue': 4}} }>>> team = 'Team1'>>> {week: {game: info}...   for week, games in weeks...   for game, info in games...   if team in (info['Away'], info['Home'])}{'Week 1': {'Game2': {'Away': 'Team1', 'Home': 'Team4', 'Venue': 6}}, 'Week 2': {'Game1': {'Away': 'Team1', 'Home': 'Team2', 'Venue': 4}}, 'Week 3': {'Game1': {'Away': 'Team1', 'Home': 'Team3', 'Venue': 6}}}

慕沐林林

您可以使用 aNestedDict并避免使用嵌套的 for 循环或理解。from ndicts import NestedDictd = {'Week 1': {'Game1': {'Away': 'Team3', 'Home': 'Team2', 'Venue': 5},                'Game2': {'Away': 'Team1', 'Home': 'Team4', 'Venue': 6}},     'Week 2': {'Game1': {'Away': 'Team1', 'Home': 'Team2', 'Venue': 4},                'Game2': {'Away': 'Team4', 'Home': 'Team3', 'Venue': 1}},     'Week 3': {'Game1': {'Away': 'Team1', 'Home': 'Team3', 'Venue': 6},                'Game2': {'Away': 'Team2', 'Home': 'Team4', 'Venue': 4}}}nd = NestedDict()nd_team1 = {}for key, value in nd.items():    if value == "Team1":            team1_record = nd.extract[key[:-1]]            nd_team1.update(team1_record)>>> nd_team1.to_dict(){'Week 1': {'Game2': {'Away': 'Team1', 'Home': 'Team4', 'Venue': 6}}, 'Week 2': {'Game1': {'Away': 'Team1', 'Home': 'Team2', 'Venue': 4}}, 'Week 3': {'Game1': {'Away': 'Team1', 'Home': 'Team3', 'Venue': 6}}}安装ndicts pip install ndicts
随时随地看视频慕课网APP

相关分类

Python
我要回答