这是我的清单。
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)]
但我需要扭转它。
我可以添加另一个密钥吗?
答案 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)