If you have multiple values to sort on I suggest using pandas, building a pandas.DataFrame and sort it using the .sort_values() method, which allows you to provide multiple sorting keys. Your data sounds to complex for lists, it is easy to lose the overview. You could work with dictionaries, but then you need to write some ugly loops or comprehension.
On the sorting logic, not the code itself, maybe calculate differently for each range of total votes?
For example, let's say there are 5 communities with up to 100 total votes, 5 with 1000 and 5 with 10000. You could, for the first, divide the percentage by some constant like let's say 10, the middle one you'd do nothing, and the third one you'd multiply the percentage by the same constant as the first. The resulting number (no longer a percentage) could indicate the engagement.
https://docs.python.org/3/library/stdtypes.html#list.sort
supply a function as key that produces a numerical value for whatever you define as "engagement".
You want some kind of decay function for when that engagement happened.
The rest is sort of up to you and depends on your math intuition a bit. If you do something like total (votes/10.000)+% relative stuff will weigh heavily until you get close to 10.000 then the votes will dominate no matter how positive the post was. But the 10.000 is arbitrary.
My advice would be to create some fake data that are plausible scenarios, (well liked, low vote), (lots of votes, medium %), (lots of votes, but old) and then you experiment with some functions and curves until you find a mix you like.
Python
Welcome to the Python community on the programming.dev Lemmy instance!
📅 Events
Past
November 2023
- PyCon Ireland 2023, 11-12th
- PyData Tel Aviv 2023 14th
October 2023
- PyConES Canarias 2023, 6-8th
- DjangoCon US 2023, 16-20th (!django 💬)
July 2023
- PyDelhi Meetup, 2nd
- PyCon Israel, 4-5th
- DFW Pythoneers, 6th
- Django Girls Abraka, 6-7th
- SciPy 2023 10-16th, Austin
- IndyPy, 11th
- Leipzig Python User Group, 11th
- Austin Python, 12th
- EuroPython 2023, 17-23rd
- Austin Python: Evening of Coding, 18th
- PyHEP.dev 2023 - "Python in HEP" Developer's Workshop, 25th
August 2023
- PyLadies Dublin, 15th
- EuroSciPy 2023, 14-18th
September 2023
- PyData Amsterdam, 14-16th
- PyCon UK, 22nd - 25th
🐍 Python project:
- Python
- Documentation
- News & Blog
- Python Planet blog aggregator
💓 Python Community:
- #python IRC for general questions
- #python-dev IRC for CPython developers
- PySlackers Slack channel
- Python Discord server
- Python Weekly newsletters
- Mailing lists
- Forum
✨ Python Ecosystem:
🌌 Fediverse
Communities
- #python on Mastodon
- c/django on programming.dev
- c/pythorhead on lemmy.dbzer0.com
Projects
- Pythörhead: a Python library for interacting with Lemmy
- Plemmy: a Python package for accessing the Lemmy API
- pylemmy pylemmy enables simple access to Lemmy's API with Python
- mastodon.py, a Python wrapper for the Mastodon API