3 回答

TA貢獻1851條經驗 獲得超4個贊
字典理解:
{match: {game: details} for match, games in a.items() for game, details in games.items() for k, v in details.items() if v == 'Team1'}

TA貢獻1784條經驗 獲得超9個贊
你也可以這樣做:
{
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}}}

TA貢獻2016條經驗 獲得超9個贊
您可以使用 aNestedDict并避免使用嵌套的 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
添加回答
舉報