Вам просто нужно объединить все, что вы сделали правильно: сортировать ключи как кортеж и , чтобы правильно ссылаться на запись dict
:
>>> sorted(AccountValues, key=lambda x: (x["portfolio_ref"], -x["percent"]))
[{'tag': 'NetLiq', 'portfolio_ref': 1, 'value': '70976.05', 'percent': 100.0, 'currency': 'USD'},
{'tag': 'FullInit', 'portfolio_ref': 1, 'value': '20642.95', 'percent': 0.0, 'currency': 'USD'},
{'tag': 'FullMaint', 'portfolio_ref': 1, 'value': '21350.54', 'percent': 0.0, 'currency': 'USD'}]
Еще лучше,используйте
sorted(AccountValues, key=itemgetter("portfolio_ref", "percent"))
Ваша первая попытка не удалась, потому что x[1]
и x[4]
не являются допустимыми ссылками на словари: вы должны использовать метки, которые вы изначально дали, а не относительные позиции.
Ваша вторая попытка неэффективна только потому, что у вас нет вторичного ключа сортировки.