Назначение переменной Python Array

Я думаю, что это не лучший способ достичь этого, поскольку он создает зависимость вашего конструктора от глобальной переменной session, а также неожиданно изменяет поведение конструктора (ожидается, что new возвращает new в конце концов). Если, например, кто-то использует ваши классы с двумя сеансами параллельно, код будет терпеть неудачу, и ему придется выкопать код, чтобы найти ошибку.

Я не знаю никакой «sqlalchemy», способ достижения этого, но я бы предложил создать функцию createOrGetAccountModel, подобную

def createOrGetAccountModel(**kw):
    if len(kw) and "name" in kw:
      x = session.query(AccountModel).filter_by(name=kw["name"]).first()
      if x: return x
    return AccountModel(**kw)
0
задан khelwood 11 March 2019 в 13:51
поделиться

2 ответа

В духе «явное лучше, чем неявное»:

data = [('John', '123'), ('Alex', '456'), ('Nate', '789')]

names = [x[0] for x in data]
ids = [x[1] for x in data]


print(names) # prints ['John', 'Alex', 'Nate']
print(ids)  # prints ['123', '456', '789']

Или даже, чтобы быть еще более явным:

data = [('John', '123'), ('Alex', '456'), ('Nate', '789')]
NAME_INDEX = 0
ID_INDEX = 1

names = [x[NAME_INDEX] for x in data]
ids = [x[ID_INDEX] for x in data]
0
ответ дан Daniel Pryden 11 March 2019 в 13:51
поделиться

это компактный способ сделать это, используя zip :

lst = [('John', '123'), ('Alex','456'),('Nate', '789')]

name, userid = list(zip(*lst))

print(name)   # ('John', 'Alex', 'Nate')
print(userid)  # ('123', '456', '789')

заметить, что результаты сохраняются в (неизменяемом) tuple с; если вам нужно (мутирует) list, вам нужно разыграть.

0
ответ дан hiro protagonist 11 March 2019 в 13:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: