Установите переменную, равную двум операторам if в одной строке - PullRequest
0 голосов
/ 09 июля 2019

Мне нужна переменная для работы следующим образом:

fppg_multiplier = 2 if row['Roster Position']
== 'MVP' else 1.5 if row['Roster Position'] == 'STAR' else 1

Как я могу сделать это в одну строку?

@SitesRegistry.register_csv_importer
class DraftKingsCaptainModeCSVImporter(DraftKingsCSVImporter):  # pragma: nocover
        site = Site.DRAFTKINGS_CAPTAIN_MODE

        def _row_to_player(self, row):
            try:
                fppg_multiplier = 2 if row['Roster Position'] == 'MVP' else 1
                fppg_multiplier = 1.5 if row['Roster Position'] == 'STAR' else 1
                name = row['Name'].split()
                player = Player(
                    row['ID'],
                    name[0],
                    name[1] if len(name) > 1 else '',
                    row['Roster Position'].split('/'),
                    row['TeamAbbrev'],
                    float(row['Salary']),
                    float(row['AvgPointsPerGame']) * fppg_multiplier,
                    game_info=self._parse_game_info(row),
                    **self.get_player_extra(row)
                )
            except KeyError:
                raise LineupOptimizerIncorrectCSV
            return player

Ответы [ 2 ]

2 голосов
/ 09 июля 2019

Ваш код работает для меня, если я помещу все это в одну строку:

>>> row = {}
>>> row['Roster Position'] = 'MVP'
>>> fppg_multiplier = 2 if row['Roster Position'] == 'MVP' else 1.5 if row['Roster Position'] == 'STAR' else 1
>>> fppg_multiplier
2
>>> row['Roster Position'] = 'STAR'
>>> fppg_multiplier = 2 if row['Roster Position'] == 'MVP' else 1.5 if row['Roster Position'] == 'STAR' else 1
>>> fppg_multiplier
1.5
>>> row['Roster Position'] = 'XXX'
>>> fppg_multiplier = 2 if row['Roster Position'] == 'MVP' else 1.5 if row['Roster Position'] == 'STAR' else 1
>>> fppg_multiplier
1
1 голос
/ 09 июля 2019

Если запись в одну строку имеет решающее значение, вы можете написать пользовательскую функцию, например:

def getval(x):
    if x=='MVP':
        return(2)
    elif x=='STAR':
        return(1.5)
    else:
        return(1)

, а затем просто вызывать функцию при необходимости.Как пример:

fppg_multipler = getval(row['Roster Position'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...