Я переношу некоторый код из PHP, который выполняет итерации через некоторые результаты базы данных и строит двумерный массив выигрышей и потерь для команд в бейсбольной лиге. Вот код, о котором идет речь в PHPМатематические операции над многомерными Python dicts
foreach ($results as $result) {
$home_team = $result['Game']['home_team_id'];
$away_team = $result['Game']['away_team_id'];
if (!isset($wins[$home_team][$away_team])) $wins[$home_team][$away_team] = 0;
if (!isset($wins[$away_team][$home_team])) $wins[$away_team][$home_team] = 0;
if (!isset($losses[$home_team][$away_team])) $losses[$home_team][$away_team] = 0;
if (!isset($losses[$away_team][$home_team])) $losses[$away_team][$home_team] = 0;
if ($result['Game']['home_score'] > $result['Game']['away_score']) {
$wins[$home_team][$away_team]++;
$losses[$away_team][$home_team]++;
} else {
$wins[$away_team][$home_team]++;
$losses[$home_team][$away_team]++;
}
}
$results
является массив, который содержит результаты запроса к базе данных
(ред добавить код Python, я имею в-PRoFESS)
Теперь у меня есть это, но в Python. results
содержит коллекцию SQLAlchemy результата объектов
from sqlalchemy import Column, create_engine, ForeignKey, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
engine = create_engine('postgresql://stats:[email protected][email protected]/ibl_stats')
Session = sessionmaker()
Session.configure(bind=engine)
session = Session()
class Game(Base):
__tablename__ = 'games'
id = Column(Integer, primary_key=True)
week = Column(Integer)
home_score = Column(Integer)
away_score = Column(Integer)
home_team_id = Column(Integer, ForeignKey('franchises.id'))
away_team_id = Column(Integer, ForeignKey('franchises.id'))
class Franchise(Base):
__tablename__ = 'franchises'
id = Column(Integer, primary_key=True)
nickname = Column(String(3))
name = Column(String(50))
conference = Column(String(10))
division = Column(String(10))
ip = Column(Integer)
# Loop through our standings building up the breakdown results
results = session.query(Game).all()
wins = dict()
losses = dict()
for result in results:
home_team = result.home_team_id
away_team = result.away_team_id
if result.home_score > result.away_score:
wins[home_team][away_team] += 1
losses[away_team][home_team] += 1
else:
wins[away_team][home_team] += 1
losses[home_team][away_team] += 1
Так что, когда я запускаю этот код, я получаю следующее сообщение об ошибке:
(venv)[email protected]:/vagrant/scripts$ python playoff_odds.py
Traceback (most recent call last):
File "playoff_odds.py", line 45, in <module>
wins[home_team][away_team] += 1
KeyError: 1
Я сделал некоторые поиски раньше, и он начинает получать в понятие «autovivification» , что-то PHP по умолчанию, но Python этого не делает.
Итак, как мне дублировать одно и то же поведение в коде Python?
Я бы начал писать Python. Доступ к Python вложенным dicts можно получить точно так же, как вы делаете в своем PHP. '$ result ['Game'] ['home_team_id']' будет просто 'result ['Game'] ['home_team_id']' в Python. Почему бы тебе не поехать. Если вы столкнетесь с определенной проблемой, * тогда * будет время попросить о помощи. – SiHa
Другими словами, сначала попробуйте что-то :) – Mai
Да, извините, я забыл добавить в версию Python то, над чем я работаю. –