Я пытаюсь ранжировать список словарей на основе общих критериев. Так что мой список выглядит примерно так:Python rank список словарей
d = [{'key1': 0, 'key2': 1}, {'key1': 1, 'key2': 0}]
Я хочу, чтобы получить ранг (в обратном порядке) каждого словаря в соответствии с критериями, которые я могу указать. Таким образом, если критерием является «key1», вывод должен быть:
1 0
Если критерием является «key2», то вывод должен быть:
0 1
Я попробовал следующую функцию:
def rank_simple(list, criteria):
return sorted(range(len(list)), reverse = True, key = type(list).__getitem__(list)[criteria])
, который дает ошибку:
TypeError: __getitem__() takes exactly one argument (0 given)
и
def rank_simple(list, criteria):
return sorted(range(len(list)), reverse = True, key = list.__getitem__[criteria])
, который дает ошибку:
TypeError: 'builtin_function_or_method' object has no attribute '__getitem__'
согласно предложениям в Efficient method to calculate the rank vector of a list in Python
Как решить эту проблему. Обратите внимание, что я не хочу использовать scipy или numpy для этого (если возможно)
Я не понимаю, где значения '1' и' 2' приходят из – gtlambert
Используйте 'ключ = лямбда х: х [критериев]'. Кроме того, в 'sorted()', используйте 'range (1, len (mylist) + 1)'. Как это, вы получите '[0, 1]' и '[1, 0]', а не '[1, 2]' и '[2, 1]'. ** Не используйте ** list 'как имя переменной, потому что он конфликтует со встроенным типом. – zondo
@gtlambert: Он использует индексирование на основе 1. – zondo