如何找到JSON列表中哪一项对于Python中的两个给定属性具有最大值



如果我有一个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 ```

我想同时拥有"奖励点"one_answers"奖励"的最大值对应的列表?我试过这个,但似乎不起作用。

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

例如,我想要与"奖励"one_answers"奖励点"的最大和相对应的列表值

谢谢

假设它实际上是一个字典。

您可以执行以下操作-

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]]

max只会给您最高的单个值,而不是前N个值。此外,key=lambda ev: ev['Reward Poignet', 'Reward']将不能用作密钥。您需要传递一个键函数,而不是使用字典值进行比较。一种方法是执行max(epmaxinfos.items(), key=lambda x: x[1])

如果您想要前N个值,请使用collections.Counter:中的most_common

返回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']

最新更新