Похоже, что структуры данных в вашем вопросе уже разумны - просто поместите их в виде списка.Если вы используете именованные кортежи , код поиска будет более читабельным, чем в противном случае.Для кода поиска / соответствия посмотрите operator.attrgetter и operator.itemgetter .
Например, здесьэто удобная форма для упорядочения данных (и в зависимости от того, что на самом деле представляют данные, вы можете выбрать более подходящие имена):
>>> from collections import namedtuple
>>> Row = namedtuple('Row', ['Pair0', 'Pair1', 'Scalar0', 'Names', 'Scalar1'])
>>> d = [
Row((732, 2378), (233, 23), 23, ['jamie'], 7),
Row((732, 2378), (233, 43), 24, ['jamie'], 3),
Row((732, 2378), (233, 56), 23, ['jamie'], 2),
Row((3434, 2378), (45, 23), 23, ['hello'], 1),
Row((3445, 2378), (76, 43), 23, ['hello'], 2),
Row((7834, 2378), (90, 56), 24, ['hello'], 5),
]
Понимание списка может быть полезно для сопоставления / фильтрациишаг:
>>> # filter on x[1][5] and x[2]
>>> e = [r for r in d if r.Pair1[1]==x and r.Scalar0==23]
>>> e
[Row(Pair0=(732, 2378), Pair1=(233, 23), Scalar0=23, Names=['jamie'], Scalar1=7),
Row(Pair0=(3434, 2378), Pair1=(45, 23), Scalar0=23, Names=['hello'], Scalar1=1)
]
Мне не ясно, что вы хотите сделать для шага, чтобы минимизировать суммы, но, надеюсь, этого ответа достаточно, чтобы приблизить вас к желаемому результату :-)