首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何查找JSON列表中的哪一项对于Python中的两个给定属性具有最大值?

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

Stack Overflow用户
提问于 2020-04-20 15:10:16
回答 2查看 48关注 0票数 0

如果我有一个json列表,我如何知道哪一项对应于列表中的两个最大值?例如,如果我有一个json列表:

代码语言:javascript
复制
      "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 ```

我想同时有对应最大“奖励”和“奖励”的列表?我试过了,但似乎不起作用。

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

例如,我想让列表值与“奖励”和“奖励策略”的最大和相对应。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2020-04-20 15:14:43

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

您可以执行以下操作:

代码语言:javascript
复制
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]]
票数 1
EN

Stack Overflow用户

发布于 2020-04-20 15:27:17

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

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

返回n个最常见元素的列表及其计数(从最常见到最少)。如果省略n或无,most_common()将返回计数器中的所有元素。具有相等计数的元素按第一次遇到的顺序排序:

演示

代码语言:javascript
复制
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))

输出

代码语言:javascript
复制
[('Reward coude', 89), ('Reward Torse', 87)]

如果你只想要奖励的名字,解开列表中的第一项:

代码语言:javascript
复制
print([k for k, _ in Counter(d).most_common(2)])
# ['Reward coude', 'Reward Torse']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61316878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档