I have a list of communities, each with total votes, upvote percentage, and the community name. I want to sort the list by ‘engagement,’ which would be some combination of total votes and upvote percentage. What is the best way to do this? What would be the best measure of ‘engagement’ with each community given this data?
- 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”. 
- 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. 
- If you have multiple values to sort on I suggest using - pandas, building a- pandas.DataFrameand 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.
- 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. 



