如何按特定键对键值存储列表进行排序? [重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

假设输入是这样的:

"[{'ability': 18, 'spin': -14, 'strike': 0, 'purity': 5, 'power': 257}, {'ability': -6, 'spin': 147, 'strike': -17, 'purity': 6, 'power': 288}, {'ability': 9, 'spin': 272, 'strike': 10, 'purity': 8, 'power': 256}, {'ability': 0, 'spin': 138, 'strike': -6, 'purity': 19, 'power': 205}]"

我必须根据键“能力”的值对输入进行排序。

def sort_kvs(lsts):
      l = len(lsts)
      sort = []
      smallest = lsts[0]["ability"]
      for i in range (l):
        if lsts[i]["ability"] < lsts[0]["ability"]:
          smallest = lsts[i]["ability"]
          small = lsts[i]
          sort.append(small)
      return sort 

我希望输出像这样:[{'ability': -6, 'spin': 147, 'strike': -17, 'purity': 6, 'power': 288}, {'ability': 0, 'spin': 138, 'strike': -6, 'purity': 19, 'power': 205}, {'ability': 9, 'spin': 272, 'strike': 10, 'purity': 8, 'power': 256}, {'ability': 18, 'spin': -14, 'strike': 0, 'purity': 5, 'power': 257}]

python sorting
2个回答
0
投票

使用sorted和自定义key

>>> l = [{'ability': 18, 'spin': -14, 'strike': 0, 'purity': 5, 'power': 257}, {'ability': -6, 'spin': 147, 'strike': -17, 'purity': 6, 'power': 288}, {'ability': 9, 'spin': 272, 'strike': 10, 'purity': 8, 'power': 256}, {'ability': 0, 'spin': 138, 'strike': -6, 'purity': 19, 'power': 205}]
>>> list(sorted(l, key=lambda x: x["ability"]))
[{'ability': -6, 'spin': 147, 'strike': -17, 'purity': 6, 'power': 288}, {'ability': 0, 'spin': 138, 'strike': -6, 'purity': 19, 'power': 205}, {'ability': 9, 'spin': 272, 'strike': 10, 'purity': 8, 'power': 256}, {'ability': 18, 'spin': -14, 'strike': 0, 'purity': 5, 'power': 257}]

如果它是sorted,无需用list包装python2


0
投票
sorted(data, key=lambda x: x['ability'])

输出:

{'ability': -6, 'spin': 147, 'strike': -17, 'purity': 6, 'power': 288}
{'ability': 0, 'spin': 138, 'strike': -6, 'purity': 19, 'power': 205}
{'ability': 9, 'spin': 272, 'strike': 10, 'purity': 8, 'power': 256}
{'ability': 18, 'spin': -14, 'strike': 0, 'purity': 5, 'power': 257}
© www.soinside.com 2019 - 2024. All rights reserved.