Присвоение значений ключам именованного кортежа

Можно ли ключам объекта namedtuple присваивать значения по отдельности и как затем вывести список значений?

Пример того, как мне хотелось сделать, присваивать именно по отдельности, так как присвоенные значения -- результаты вызова из БД, что каждый раз при вызове функции должны были бы обновляться:

features = namedtuple('Features', ['val1',  'val2', 'val3', 'val4'])

features.val1 = 1690  
features.val2 = 12
features.val3 = 1990
features.val4 = 120

И я хотела бы чтоб в итоге было:

list(features)
output: [1690, 12, 1990, 120]

Но работает только так:

features.val1, features.val2 
output: 1690, 12

В итоге features -- это main.Features, нельзя делать features._asdict.values() или list(features), чтобы получить вектор значений. Я понимаю, что правильно делать так:

features = namedtuple('Features', ['val1',  'val2', 'val3', 'val4'])
f = features(val1 = 1690, val2 = 12, val3 = 1990, val4 = 120)

Но так, в моем случае совершенно неудобно.


Ответы (1 шт):

Автор решения: CrazyElf

Вы просто используете тип как объект, а нужно создать экземпляр объекта этого типа:

from collections import namedtuple

Features = namedtuple('Features', ['val1',  'val2', 'val3', 'val4'])
features = Features(1690, 12, 1990, 120)
list(features)

[1690, 12, 1990, 120]

Как выставить для namedtuple значения по умолчанию в разных версиях Python написано здесь

→ Ссылка