Optimising two for loops in Python
Assume you are referring to speed, not conciseness when asking about efficiency. In which case reducing the amount of loops will not necessarily improve performance.

"type": next((data_type["type"] for data_type in DATA_TYPES if data_type["name"] == data_type_attr_name))


This can be improved so that you are not needing to go over DATA_TYPES looking for a matching name to data_type_attr_name every iteration. Instead you can make a reverse lookup dictionary once before the loop where data_type["name"] is the key.  

Whenever you are searching through a list often, it can be very beneficial to create a dictionary.