如果我有一个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 ```我想同时有对应最大“奖励”和“奖励”的列表?我试过了,但似乎不起作用。
result = max(epmaxinfos, key=lambda ev: ev['Reward Poignet', 'Reward'])
例如,我想让列表值与“奖励”和“奖励策略”的最大和相对应。
谢谢
发布于 2020-04-20 15:14:43
假设它实际上是一本字典。
您可以执行以下操作:
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]]发布于 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()将返回计数器中的所有元素。具有相等计数的元素按第一次遇到的顺序排序:
演示
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']https://stackoverflow.com/questions/61316878
复制相似问题