簡體   English   中英

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

[英]How to search a nested dictionary for a given value

我有一本看起來像這樣的字典:

{'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”的所有固定裝置並獲得 output 的:

{'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

我是在正確的路線上,還是完全偏離了基地? 任何幫助將不勝感激

字典理解:

{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}}}

您可以使用NestedDict並避免使用嵌套的 for 循環或理解。

from ndicts import NestedDict

d = {'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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM