Как найти, какой элемент в списке JSON имеет наибольшее значение для двух заданных атрибутов в Python? - PullRequest
0 голосов
/ 20 апреля 2020

Если у меня есть список json, как я могу узнать, какой элемент соответствует двум наибольшим значениям списка? например, если у меня есть список json:

      "Z coude": 20,
     "X poignet":25 ,
      "Z poignet":30 ,
     "X Main":70 ,
     "Z Main": 10,
     "Reward pied":12 ,
    "Reward Tibia":14 ,
      "Reward Cuisse":15,
     "Reward appuiCuisse":16 ,
     "Reward Tête":14 ,
    "Reward Torse":87 ,
     "Reward coude": 89,
      "Reward poignet":10 ,
     "Reward main":30 ,
     "Reward bras":33 ,
         "Reward":17 ,
    "Reward knee":10 ```

Я хочу, чтобы список соответствовал максимуму "Reward poi gnet" и "Reward" одновременно? Я пробовал это, но это не похоже на работу.

result = max(epmaxinfos, key=lambda ev: ev['Reward Poignet', 'Reward'])

например, я хочу получить список значений, соответствующих максимальной сумме "вознаграждение" и "вознаграждение пои gnet"

Спасибо

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Предполагая, что это на самом деле словарь.

Вы можете сделать следующее -

d = {
   "X coude":15 ,
   "Z coude": 20,
   "X poignet":25 ,
   "Z poignet":30 ,
   "X Main":70 ,
   "Z Main": 10,
   "Reward pied":12 ,
   "Reward Tibia":14 ,
   "Reward Cuisse":15,
   "Reward appuiCuisse":16 ,
   "Reward Tête":14 ,
   "Reward Torse":87 ,
   "Reward coude": 89,
   "Reward poignet":10 ,
   "Reward main":30 ,
   "Reward bras":33 ,
   "Reward":17 ,
   "Reward knee":10 
}
num_res = 2
results = [k for k,v in sorted(d.items(), key=lambda x: -x[1])[:num_res]]
0 голосов
/ 20 апреля 2020

max даст вам только одно наибольшее значение, а не верхние значения N. Также key=lambda ev: ev['Reward Poignet', 'Reward'] не будет работать в качестве ключа. Вам нужно передать ключевую функцию, чем использовать значения словарей для сравнения. Одним из способов было бы сделать max(epmaxinfos.items(), key=lambda x: x[1]).

. Если вы хотите получить верхние значения N, используйте most_common из collections.Counter:

Возвращает список из n наиболее распространенных элементов и их количество от самых распространенных до наименьших. Если n опущено или None, most_common () возвращает все элементы в счетчике. Элементы с равным количеством упорядочены в порядке, в котором они встречаются:

Демо

from collections import Counter

d = {
   "X coude":15 ,
   "Z coude": 20,
   "X poignet":25 ,
   "Z poignet":30 ,
   "X Main":70 ,
   "Z Main": 10,
   "Reward pied":12 ,
   "Reward Tibia":14 ,
   "Reward Cuisse":15,
   "Reward appuiCuisse":16 ,
   "Reward Tête":14 ,
   "Reward Torse":87 ,
   "Reward coude": 89,
   "Reward poignet":10 ,
   "Reward main":30 ,
   "Reward bras":33 ,
   "Reward":17 ,
   "Reward knee":10 
}

print(Counter(d).most_common(2))

Выход

[('Reward coude', 89), ('Reward Torse', 87)]

Если вам нужны только имена наград, распакуйте первый элемент в списке:

print([k for k, _ in Counter(d).most_common(2)])
# ['Reward coude', 'Reward Torse']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...