Это работает.
Использование лямбды:
result = list(map(lambda x: x['name'] if x['Age'] == "10" else None, listOfDict ))
result = [x for x in result if x is not None]
print(result)
Можно использовать простой подход, такой как использование дисплейного списка (glNewList/glEndList)
Другая опция, которая немного более сложна, состоит в том, чтобы использовать Буферные Объекты Вершины (VBOs - GL_ARB_vertex_buffer_object). У них есть преимущество, что они могут быть изменены динамично, тогда как дисплейный список не может.
Они в основном обрабатывают все Ваши данные/преобразования в пакетном режиме, и их выполняются на GPU (предполагающий, что Вы используете аппаратное ускорение), приводящий к более высокой производительности.
Не уверенный, если Вы уже делаете это, но стоит упомянуть, что необходимо попытаться использовать GL_LINE_STRIP вместо отдельного GL_LINES, если это возможно, для сокращения суммы данных вершины, отправляемых в карту.
Буферные Объекты вершины, вероятно, что Вы хотите. После того как Вы загружаете исходный набор данных в, можно сделать модификации к существующим блокам с glBufferSubData()
.
Если Вы добавляете дополнительные линейные сегменты и переполняете размера Вашего буфера, необходимо будет, конечно, сделать новый буфер, но это не отличается, чем необходимость выделить новый, больший блок памяти в C, когда что-то растет.
Править: Несколько примечаний, демонстрирующихся списки, и почему не использовать их:
Мое предложение состоит в том, чтобы попытаться использовать график сцены, некоторую иерархическую структуру данных для строк/кривых. Если у Вас будут огромные модели, то производительность будет затронута, если у Вас будет простой список строк. С графиком/древовидной структурой можно проверить легко, какие объекты видимы и которые не являются при помощи ограничивающих объемов. Также с scenegraph можно применить преобразование легко и конфигурации повторного использования.