[英]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.