In python, you can directly use Pandas dataframe to handle Decimal objects. Also, I tried using json.loads() instead of eval() or literal_eval() as the data in your example seems to be JSON-like.
Next, try passing the data either as bytes or as a file-like object to use streamlit download.