如何将list [i] [1]的元组列表从最大到最小排序为关键字

时间:2015-05-15 21:09:40

标签: python sorting key

这是我的清单。

package main

import (
    "encoding/json"
    "net/http"
    "fmt"
)

type Addrs struct {
    ip string
}

func handler(w http.ResponseWriter, r *http.Request) {
    response, err := getJsonRes()
    if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
    return
    }
    w.Header().Set("Content-Type", "application/json")
    fmt.Fprintf(w, string(response))
}

func main() {
    http.HandleFunc("/", handler)
}

func getJsonRes(r *http.Request)([]byte, error ) {
    ip := Addrs{ r.RemoteAddr }

    return json.MarshalIndent(ip, "", " ")
}

对此列表进行排序的结果将是。

[('a', 12), ('c', 4), ('b', 3), ('e', 6), ('d', 5), ('g', 50), ('f', 30),]  

我尝试使用:

[('g', 50), ('f', 30), ('a', 12), ('e', 6), ('d', 5), ('c', 4), ('b', 3)]  

但我需要扭转它。

我可以添加另一个密钥吗?

4 个答案:

答案 0 :(得分:4)

显而易见的方法是明确使用恰好为此目的而存在的reverse参数:

sorted(alpha_items, key=lambda x: x[1], reverse=True)

如果你按数字排序,你也可以否定它们:

sorted(alpha_items, key=lambda x: -x[1])

答案 1 :(得分:2)

operator.itemgetter(n)构造一个可调用的函数,它将迭代对象(list,tuple,set)视为输入,从中获取第n个元素。

In [26]: mylist=[('a', 12), ('c', 4), ('b', 3), ('e', 6), ('d', 5), ('g', 50), ('f', 30),]

In [27]: from operator import itemgetter

In [30]: s_l=sorted(mylist,key=itemgetter(1),reverse=True)

In [31]: s_l
Out[31]: [('g', 50), ('f', 30), ('a', 12), ('e', 6), ('d', 5), ('c', 4), ('b', 3)]

答案 2 :(得分:0)

为什么不像bubble那样简单的排序算法?

基本上我们检查是否:

a[i][1]<a[i+1][1]. 

如果是这种情况,我们只需交换它们。

重复。

检查sorting-algorithms.com并查看Bubble算法动画。

>>> a = [('a', 12), ('c', 4), ('b', 3), ('e', 6), ('d', 5), ('g', 50),('f', 30),]  
>>> for elem in range(len(a)-1, 0, -1): 
...   for i in range(elem):
...     if a[i][1]<a[i+1][1]:
...        a[i], a[i+1] = a[i+1], a[i]
... 
>>> a
[('g', 50), ('f', 30), ('a', 12), ('e', 6), ('d', 5), ('c', 4), ('b', 3)]

答案 3 :(得分:-1)

alpha_items.sort(key=lambda s:s[1], reverse = True)