Вы можете рассмотреть collections.namedtuple
типа для создания кортежа, как объектов, которые имеют поле, доступное по атрибуту поиск.
collections.namedtuple(typename, field_names[, verbose])
Returns a new tuple subclass named typename. The new subclass is used to create tuple-like objects that have fields accessible by attribute lookup as well as being indexable and iterable. Instances of the subclass also have a helpful docstring (with typename and field_names) and a helpful __repr__()
method which lists the tuple contents in a name=value format.
>>> import collections
>>> mytup = collections.namedtuple('mytup', ['tag','name', 'values'])
>>> e1 = mytup('tag1','great',[1,'two',3])
>>> e1
mytup(tag='tag1', name='great', values=[1, 'two', 3])
>>> e1.values
[1, 'two', 3]
>>>
Опираясь на другие ответы, пример фильтрации списка mytup
объектов:
>>> tlist = [mytup("foo", "dog", [1,2,3,4]),
mytup("bar","cat", [4,5,6,7,8,9]), mytup("moo","cow", [4,5,7,8,9,1,3,4,65])]
>>> tlist
[mytup(tag='foo', name='dog', values=[1, 2, 3, 4]),
mytup(tag='bar', name='cat', values=[4, 5, 6, 7, 8, 9]),
mytup(tag='moo', name='cow', values=[4, 5, 7, 8, 9, 1, 3, 4, 65])]
>>> [t for t in tlist if t.tag == 'bar']
[mytup(tag='bar', name='cat', values=[4, 5, 6, 7, 8, 9])]
>>>
Namedtuple
объекты могут, конечно, можно использовать и в других структурах (например, dict
), как упоминалось в других ответах. Преимущество, очевидно, состоит в том, что поля являются с именем, а код с их использованием более ясен.
почему это время downvoted? – blank
Вопрос заголовка вводит в заблуждение; ответ на вопрос в названии просто «да». Тело вопроса фактически запрашивает лучшую структуру для хранения некоторых данных, что является другим вопросом. –
-1: «наилучший вариант» не имеет смысла. Задайте вопрос, на который можно ответить. Лучше с какой целью? Скорость? Место хранения? Сложность кода? Какие? –