Namedtuples: some unexpected inconveniences
Peter Otten
__peter__ at web.de
Wed Apr 12 18:15:18 EDT 2017
Deborah Swanson wrote:
>> >value = getattr(record, label)
>>
>> That should work.
>
> We may agree that it *should* work, by an intuitive grasp of how it
> should work, but it doesn't. You get "object has no attribute 'label'.
Only if the namedtuple
(1) does not have a label attribute and
(2) the value of the name label is the string "label"
In that case both
label = "label"
getattr(record, label)
and
record.label
will fail with the same AttributeError. The problem is *not* the dynamic
access through getattr().
>> Indeed you cannot change the namedtuple's attributes. Like the "normal"
>> tuple it is designed to be immutable. If you want changes in one list
>> (the group) to appear in another (the original records) you need a
>> mutable data type.
>
> Sadly, that does seem to be the correct conclusion here.
Think hard if you really need the original list.
More information about the Python-list
mailing list